nginx将所有请求传递给代理

我试图设置nginx作为反向代理服务所有静态资产,同时转发所有dynamic请求到Apache。

我跟随了一大堆不同的教程,其中没有一个给我想要的效果。

我的/etc/nginx/sites-available/default外观如下:

 server { listen 81 default; server_name localhost; access_log /var/log/nginx/localhost.access.log; root /var/www/www.example.com/httpdocs; location / { try_files $uri @proxy; } location @proxy { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k; proxy_pass http://www.example.com:80; } location ~ \.php$ { proxy_pass http://www.example.com:80; } location ~ /\.ht { deny all; } } 

我正在使用端口81,以免中断正在运行的服务。

看着nginx和apache的访问日志,我可以看到所有的请求仍然同时触及nginx和apache,也就是所有的图像,CSS和JS请求。

如果我将@proxy中的所有内容注释掉,那么静态资产就不会出现问题。

作为一个额外的问题,我想,我的location ~ \.php$规则仍然服务于未分析的PHP文件。

你尝试过吗? 将此行移出location块,到server上下文:

 try_files $uri @proxy; 

这听起来像你已经证实,你正在testing的静态资产实际上存在于你认为的地方,如/var/www/www.example.com/httpdocs/$uri ;

可能值得仔细检查一下,这个“root”是否与你为Apache设置的内容相匹配,Nginx运行的用户是否有权访问和读取这些文件。

好吧,事实上,我的问题是由于81上的nginx和80上的apache,而来自apache的PHP提供的静态资产链接与绝对URL不保留任何端口的HTML,因此这些链接默认为端口80.切换nginx 80和Apache到81解决了这个问题。