我正在运行一个网站 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 [email protected]
DocumentRoot "/var/www/html"
ServerName www.example.com
ScriptAlias /path "/path/to/cgi/script"
</VirtualHost>
因此,基本上,当有人访问 www.example.com 时,他会被重定向到 www.example.com/path,该路径将执行 ScriptAlias 指令定义的 CGI 脚本。
一切都运行正常,直到我必须执行以下操作:
安装 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 时,出现了问题。
答案1
我修复了这个问题,但我不明白它是如何修复的。在我的 nginx conf 中,我将请求从端口 80 的 nginx 转发到端口 8080 的 apache,我将以下行替换为
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 服务器上。