我的情况如下:与其它端口的Nginx重定向冲突
- 应用程序1在运行:server.domain.com(192.168.1.3)
- 应用2在运行:server.domain。玉米:8080(192.168.1.2)
我的路由器设置为路由请求在端口80到App 1和8080端口的应用程序2.
迄今为止这么好,这个场景一直在为工作。
最近我尝试切换到nginx的,我决定到http流量重定向到https流量应用1.
我设置了nginx的容器和现在用的是以下配置:
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
# main server block
server {
listen 443 ssl default_server;
root /config/www;
index index.html index.htm index.php;
server_name _;
ssl_certificate /path to cert;
ssl_certificate_key /path to cert;
ssl_dhparam /path to cert;
ssl_ciphers '';
ssl_prefer_server_ciphers on;
client_max_body_size 0;
location/{
try_files $uri $uri/ /index.html /index.php?$args =404;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# With php7-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php7-fpm:
#fastcgi_pass unix:/var/run/php7-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
}
这成功地重定向http到https和应用程序1按预期工作。 试图访问的应用程序2我也将被重定向到HTTPS(它不应该,应用2不支持它)
现在我已经想通了为什么出现这种情况然而,当。
谷歌浏览器有缓存,所以当我访问非https网址时,它会将301重定向到https版本。它将它保存在缓存中,现在认为我总是希望https,而不管端口如何。
我找到的解决方法是要chrome:// net-internals并清除那里的缓存。打开应用程序2然后成功,但在访问应用程序1后,我终于再次在同一个循环中。
我已经试过遍布净几个默认的修复,但迄今为止他们都没有工作。
任何人都知道我必须把我的配置来解决这个问题?
PS:证书路径,域名和端口的实际情况
我指定的IP地址,以传达他们不在同一台服务器的事实,对不起,如果这不是太清楚。 理想情况下,我希望运行nginx的服务器忽略除app1的请求之外的任何内容。 (这将在端口80/443而不是端口8080) 我怀疑它只是这样做,但它发送一个301到chrome,将其放入其缓存,随后将所有其他端口重定向到https版本。 –
谢谢你的澄清!此修复可能与更改chrome缓存为302的301(永久重定向)一样简单。有关详细信息,请访问http://superuser.com/questions/304589/how-can-i-make-chrome-stop-caching-重定向或http://superuser.com/questions/304589/how-can-i-make-chrome-stop-caching-redirects – quetzaluz
对不起,这实际上是我的第一个想法,但它似乎也记得,以及:/ 让我再试一次,虽然可能已经犯了一个错误 –