我正在尝试设置nginx以返回所有http请求的https网址。 问题是,它返回没有www的https url导致无效的URL。
这是我的配置:
server {
listen 80; server_name my_server;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/my_pem.pem;
ssl_certificate_key /etc/ssl/my_key.key;
server_name my_server;
access_log /var/log/nginx/my_log.access.log;
...
}
我尝试在server_name中包含www,并为301返回指定带有www的显式网址。
所有内容都会导致网址无效。
我注意到,当我登录应用程序时,我将https更改为http并触发请求重定向工作。当我退出时,重定向失败并呈现没有www。
的https网址然后我尝试只使用server_name,如下所示:return 301 https:// $ server_name但是也没有用。
我想让用户不必担心他们指定的网址。网址如下所示:www.one.two-three.com
<<<编辑>>>
这有效:http://www.one.two-three.com/some_request
并且不会:http://www.one.two-three.com
<<<编辑>>>
<<<编辑1>>>
在Chrome / Chromium的网址行输入www.one.two-three.com,它会重定向到https://www.one.two-three.com。
在Firefox中,它返回https://one.two-three.com
<<<编辑1>>>
有人可以帮忙吗?
谢谢。
西巴
答案 0 :(得分:0)
我用来解决这个问题的模式有2个部分。首先,我设置了显式重定向,从HTTP到正确的HTTPS URL,以及从裸HTTP到" www" HTTPS。其次,这意味着我可能不会依赖$server_name
,因此我的配置中有一些可维护的重复。
server {
listen 80;
server_name www.example.com example.com example.biz example.us www.example.biz www.example.us;
return 301 https://www.example.com$request_uri;
}
server {
listen 443;
server_name example.com example.biz example.us www.example.biz www.example.us;
ssl on;
ssl_certificate /etc/ssl/com.example.crt;
ssl_certificate_key /etc/ssl/com.example.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
return 301 https://www.example.com$request_uri;
}
server {
listen 443;
server_name www.example.com;
...
}