Nginx + Apache尾部斜杠重定向[关闭]


8

我有一个Nginx80端口上运行的服务器,正在作为要Apache 2.2侦听的代理127.0.0.1:8080

当我访问http://hostname/subfolder/它时效果很好。
当我访问http://hostname/subfolder它时,会将我重定向到http://hostname:8080/subfolder/错误的地方。

据我看到了错误的重定向被Apache返回,但UseCanonicalNameUseCanonicalPhysicalProxy都设置为Off

关于如何解决该问题的任何想法?


考虑到您对nginx配置的问题似乎是由于您对端口80的访问没有尾部的斜杠会导致重定向到端口8080。除非您的nginx正在代理Apache,而Apache正在订购重定向。
PP。

我使用nginx作为代理
夸克2010年

Answers:


5

我也遇到了这个问题,并且可以在我的nginx配置中的proxy_pass指令之后立即使用proxy_redirect指令修复它:

proxy_redirect http://example.com:8080/ http://example.com/ 

这是我完整的nginx配置(在我的情况下,Apache在端口81上并托管两个站点。我添加了两个特定于站点的proxy_redirect行,因为我不确定如何添加单个通用行。)

server {
    listen 80;

    access_log /var/log/nginx/apache-proxy.access.log;

    location / {
        proxy_pass http://localhost:81;

        #fix for apache redirects that include the port number
        proxy_redirect http://nfriedly.com:81/ http://nfriedly.com/;
        proxy_redirect http://misticflame.com:81/ http://misticflame.com/;

        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 6000;
        proxy_send_timeout 6000;
        proxy_read_timeout 6000;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        send_timeout 6000;
        proxy_buffering off;
        proxy_next_upstream error;

    }
}

注意:这是5年前nginx的1.0之前的版本。以下是当前版本的proxy_redirect的文档:http ://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect


添加proxy_redirect会给出语法错误
TomSawyer

这是在一个相当老的nginx版本上。我不再使用nginx(我个人站点的github页面上仅是静态内容),但我使用指向当前proxy_redirect文档的链接更新了答案。
内森·弗里德利

通过这种方式,由于重定向,您的速度仍然变慢
TomSawyer

2

如果您在Apache上的ServerName指令设置为“ hostname:8080”,请删除“:8080”或将其更改为“ hostname:80”。您还可以添加“ proxy_set_header主机$ host:80”


1

我很久以前就有这个问题。.我记得它与HTTP RFC有关,结尾的斜杠表示目录(/ test /),结尾的斜杠表示文件(/ test)

长话短说,如果没有,则添加一个重写规则,该规则将在请求后添加斜杠。

看看Nginx服务器的Solved:trailing斜杠问题

HTP



0

也许nginx没有设置代理标头来告诉apache原始请求是什么样的。

在Nginx中:

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

参见http://wiki.nginx.org/LikeApache

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.