【发布时间】:2016-08-16 04:35:11
【问题描述】:
目前,我正在以这种方式重定向 http 请求:
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name emberhub.me www.emberhub.me test.emberhub.me;
return 301 https://$host$request_uri;
}
# HTTPS server static html
#
server {
listen 443 ssl;
server_name emberhub.me www.emberhub.me;
root html;
index index.html index.htm;
ssl on;
....
location / {
try_files $uri $uri/ =404;
# HTTPS server proxy Node.js app
#
server {
listen 444 ssl;
server_name test.emberhub.me;
ssl on;
...
location / {
proxy_pass http://127.0.0.1:8080;
当用户请求时: http://emberhub.me 或 http://www.emberhub.me ,他被正确重定向到 https://emberhub.me 或 https://www.emberhub.me (在默认端口 443 上)
但是当用户请求时: http://test.emberhub.me ,他也被重定向到端口 443 并获取静态 html 页面,而不是 node.js 应用程序
如果用户使用端口 444 请求它 http://test.emberhub.me:444,那么他就被正确代理到了 node.js 应用了……
有没有办法根据 server_name 过滤请求并使用正确的 SSL 端口重定向它?还是有其他更好的方法来执行这些重定向?
感谢反馈
更新 1:
我尝试更改服务器声明,如下所示,但我仍然遇到同样的问题...http://test.emberhub.me,总是重定向到端口 443
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name emberhub.me;
return 301 https://$host$request_uri;
}
server {
listen 80;
# listen [::]:80 ipv6only=on;
server_name www.emberhub.me;
return 301 https://$host:443$request_uri;
}
server {
listen 80;
# listen [::]:80 ipv6only=on;
server_name test.emberhub.me;
return 301 https://$host:444$request_uri;
}
更新 2
我将默认配置更新为
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name test.emberhub.me;
return 301 https://$host:444$request_uri;
}
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name emberhub.me www.emberhub.me;
return 301 https://$host$request_uri;
}
使用curl -v 一切正常...
$ curl -v http://emberhub.me
* Rebuilt URL to: http://emberhub.me/
...
< Connection: keep-alive
< Location: https://emberhub.me/
...
Connection #0 to host emberhub.me left intact
$ curl -v http://www.emberhub.me
...
< Connection: keep-alive
< Location: https://www.emberhub.me/
Connection #0 to host www.emberhub.me left intact
curl -v http://test.emberhub.me
Rebuilt URL to: http://test.emberhub.me/
...
< Location: https://test.emberhub.me:444/
Connection #0 to host test.emberhub.me left intact
但是在浏览器中请求http://test.emberhub.me 在端口443 上显示https://test.emberhub.me ...
【问题讨论】:
-
为每个域/站点单独配置,而不是将它们全部组合在一起,因为您有冲突的 server_name 指令,因此它会在第一个服务器块上捕获所有内容。所以为 emberhub.me 和 www.emberhub.me 做一个配置,因为它们实际上是相同的,并为 test.emberhub.me 做一个单独的配置我害怕。谷歌也为 ssl 正确配置 nginx 以使其安全。
-
我试图分离配置但没有办法...
-
对不起老话题。但问题可能是您的浏览器缓存与 ip 的指令混淆;)尝试使用隐身。
标签: nginx http-redirect