我在我的服务器上使用nginx进行请求转发。我有两个服务器块,一个用于主站点,另一个用于服务我的S3静态内容的服务器块。
server { listen 80; server_name abc.guru www.abc.guru; access_log off; error_log off; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; client_max_body_size 10m; client_body_buffer_size 128k; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; } } # Server for S3 This accepts anything apart from the above two server { # Listen on port 80 for all IPs associated with your machine listen 80 default_server; # Catch all other server names server_name _; }
这适用于abc.guru但如果我inputwww.abc.guru它失败,即给出错误此网页有一个redirect循环 。 我提到文档,它说我们可以使用空间添加多个域 。
我有我的DNSloggingwww @和@是指根IP地址。
我怎么能得到它在第一个服务器块和第二个服务器块中的任何其他域的工作?
在我的.htaccess文件中
RewriteRule (.*) http://www.abc.guru/$1 [R=301,L] RewriteRule ^http://www.abc.guru/$1 agent.guru [L] RewriteRule ^http://www.abc.guru/$1 index.php [L]
这里的罪魁祸首是Apacheconfiguration中的第一个RewriteRule。 它告诉Apache将每个请求redirect到http://www.abc-guru.com 。
所以,当nginx发送一个请求到http://www.abc-guru.com 。 请求被路由到Apache,第一个RewriteRule将该请求redirect到http://www.abc-guru.com ,从而导致redirect循环。
最好的解决scheme是将redirect迁移到nginx,就像xxdesmusbuild议的那样。
另一个select是限制第一个RewriteRule仅在HTTP主机头是abc-guru.com并且带有RewriteCond指令abc-guru.com应用。
为什么不直接在Nginx中处理这些redirect,而是在你的Apache htaccess文件中处理redirect? 前进的根 – “万维网与301redirect,然后在www的server_name块发送到您的proxy_pass(Apache)?