Итак, у меня есть сайт www.example.com. Изначально я использовал apache, и любое обращение к моему сайту перенаправлялось на www.example.com/path. Теперь это перенаправление определено в моем httpd.conf как:
Redirect 301 /index.html http://www.example.com/path
и мои настройки VirtualHost для этого домена выглядят так:
<VirtualHost 1.1.1.1:80>
DirectoryIndex index.php index.html index.htm index.shtml
ServerAdmin root@www.example.com
DocumentRoot "/var/www/html"
ServerName www.example.com
ScriptAlias /path "/path/to/cgi/script"
</VirtualHost>
Таким образом, когда кто-то посещает www.example.com, он перенаправляется на www.example.com/path, который выполняет сценарий CGI, как определено в директиве ScriptAlias.
Все работало нормально, пока мне не пришлось сделать следующее:
Установите nginx и настройте его для работы в качестве обратного прокси для apache.
Теперь nginx слушает порт 80, а apache слушает 8080. Я внес соответствующие изменения в файл httpd.conf.
Listen 8080
и
<VirtualHost 1.1.1.1:8080>
Теперь, когда кто-то пытается перейти на www.example.com, он перенаправляется на www.example.com/path, но скрипт не запускается. На моей веб-странице появляется следующая ошибка:
Not Found
The requested URL /path was not found on this server.
Apache/2.4.25 (Unix) PHP/7.0.16 SVN/1.7.14 Server at www.example.com Port 80
Тот факт, что он перенаправляет, говорит мне, что запрос от nginx к apache работает нормально. Должно быть что-то неправильное выполнение CGI. В журналах ошибок apache и журналах ошибок nginx ничего нет.
Я в этом не разбираюсь. С apache все работало нормально, но теперь, когда запрос достигает apache, что-то ломается.
Я устранил проблему, но не понимаю, как ее исправить. В моем nginx conf, где я перенаправляю запрос от nginx на порту 80 на apache на порту 8080, я заменил строку
proxy_pass http://127.0.0.1:8080;
с участием
proxy_pass http://www.example.com:8080;
По моему мнению, 127.0.0.1 и www.example.com должны быть такими же, как мой nginx установлен на сервере www.example.com.