Nginx在访问URL时不带斜杠的情况下重定向到端口8080 [关闭]


19

访问时:http : //example.com/somefolder- > http://example.com:8080/somefolder

我已经试过了:

 http {
    port_in_redirect off;

有任何想法吗?


您可以提供您的配置吗?您是否要代理Nginx背后的另一项服务?
Shane Madden

我相信我们正在代理apache。您想要哪些配置文件?
克里斯·穆恩奇

3
Nginx配置文件,用于定义server包含proxy_pass指令的块。您可能需要的将是一个proxy_redirect指令-看到您的配置应该确认。
Shane Madden

请注意,某些浏览器会缓存重定向,因此port_in_redirect从更改为时onoff您可能需要重新启动它。
emersion

@emersion port_in_redirect根本不起作用
TomSawyer

Answers:


21

我只是遇到了同样的问题,port_in_redirect off;并为我实际工作,只需确保在server {}块内使用它即可。

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}

甚至用port_in_redirect在里面location
wqw

非常适合在负载平衡器后面的8080上托管nginx。谢谢
xxstevenxo

也为我工作,非常感谢您的帮助
h3nr1ke

4

应该解决问题。proxy_redirectproxy_pass指令之后添加指令

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


3

如果有人在nginx反向代理设置后面有apache时仍然遇到此问题,则可以尝试ff:

  位置 / {
    proxy_redirect关闭;
    proxy_set_header主机$ host:$ server_port; #<-这个解决了我的问题
    proxy_set_header X转发的主机$ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

我的设置是让Apache监听127.0.0.1:8083,并让Nginx代理请求它。


2

我的nginx + Apache设置也遇到了同样的问题。Apache似乎正在重定向到它自己的端口(在8080上运行),而nginx在端口80上。

在我的设置中,这为普通网址设置了无限重定向循环

proxy_set_header Host $host:80; # Force port 80

而是将返回的数据绑定到端口80,如下所示:

proxy_bind $host:80; # Bind to port 80

这是我的nginx服务器块:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name _; # Wildcard server

    location / {
        proxy_bind $host:80; # Bind to port 80 << THIS IS THE MAGIC
        proxy_pass http://localhost:8080;
        proxy_set_header Host            $host; # Pass host header
        proxy_set_header X-Real-IP       $remote_addr; # Preserve client IP
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

通过此通配符设置,所有nginx没有服务器块的请求都将传递到Apache。


根本不起作用
TomSawyer

1

万一其他人遇到了这个问题-此处的文章:http : //www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/为我解决了这个问题。

我必须在代理中添加一个额外的标头。

确保已将“主机”设置为,$http_host并且还将设置为X-Forwarded-Host$http_host如下所示:

proxy_redirect off;
proxy_set_header Host $http_host;             # <-- make sure this is $http_host
proxy_set_header X-Forwarded-Host $http_host; # <-- make sure you set this
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 8k;
proxy_busy_buffers_size 64k;

它根本不起作用
TomSawyer

1

我认为这个简单的例子就足够了:

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}


0

我有一个类似的问题。

也许您应该使用指令proxy_set_header来设置标头的主机和位置。在我的配置中,我添加了proxy_set_header Location $host:80;并且所有请求现在都返回端口80。


我相信这将打破重定向到“ /”之外的位置-每个重定向都将指向$ host:80
perrierism

0

这个问题是由Nginx自动将相对路径转换为绝对路径引起的,对吧?
有一种方法可以告诉Nginx不翻译,您可以在斜杠前添加一个空格: ngx.redirect(" /foo")


请注意,这是3年前的问题。
鹿猎人

-1

我建议将其添加到您的服务器块中:

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

这是当您转到example.com/wp-admin时,它将转到example.com/wp-admin,而不是example.com:8080/wp-admin/,如果您使用的是CloudFlare DNS,它将说该网站已关闭。

我正在使用Ubuntu,Nginx和Varnish,它现在可以完美运行,而不是禁用port_in_redirect。

要添加,请确保在以下情况下重新启动nginx:

sudo service nginx restart

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.