我的configuration:
server { listen 80; server_name mydomain.com; rewrite ^(.*)$ $scheme://www.mydomain.com$1; } server { listen 80; server_name www.mydomain.com; return 301 https://www.mydomain.com$request_uri; if ($host !~* ^(www.mydomain.com)$ ) { return 444; } } server { listen 443; server_name www.mydomain.com; ssl on; ssl_certificate /path/to/www.mydomain.com_chain.pem; ssl_certificate_key /path/to/www.mydomain.com.key; ... }
什么工作 :
mydomain.comredirect到www.mydomain.com www.mydomain.comredirect到https://www.mydomain.com 什么不能正常工作 :
https://mydomain.com进入浏览器时,redirect到www.mydomain.com根本不会发生,但是请求被传递到应用程序服务器上https://mydomain.com
什么是上面的https://mydomain.com问题的解决scheme?
在您的SSL服务器块中使用if语句来检查主机:
server { listen 443; server_name www.mydomain.com mydomain.com; ssl on; ssl_certificate /path/to/www.mydomain.com_chain.pem; ssl_certificate_key /path/to/www.mydomain.com.key; if ($host = 'mydomain.com' ) { rewrite ^/(.*)$ https://www.mydomain.com/$1 permanent; } ... }
据我怀疑,原因是因为端口80被跳过,端口443直接访问。 添加以下server块启用redirect:
server { listen 443; server_name mydomain.com; ssl on; ssl_certificate /path/to/www.mydomain.com_chain.pem; ssl_certificate_key /path/to/www.mydomain.com.key; rewrite ^(.*)$ $scheme://www.mydomain.com$1; }
如果有人知道更好或更优雅的解决scheme,请添加您的答案。
我宁愿避免如果因为如果是邪恶的 ,我更喜欢使用返回重写,因为它不需要运行正则expression式引擎。
server { #default server that catches all undefined host names listen 80 default_server; return 444; } server { #redirecting server for non-www ssl and non ssl domains listen 80; liste 443 ssl; server_name mydomain.com; ssl_certificate /path/to/www.mydomain.com_chain.pem; ssl_certificate_key /path/to/www.mydomain.com.key; return 301 https://www.mydomain.com$request_uri$is_args$query_string; } server { # redirecting server for www non ssl server listen 80; server_name www.mydomain.com; return 301 https://mydomain.com$request_uri$is_args$query_string; } server { # main server config listen 443 ssl; server_name www.mydomain.com; ssl on; ssl_certificate /path/to/www.mydomain.com_chain.pem; ssl_certificate_key /path/to/www.mydomain.com.key; # remaining config... }