我有一个通配符 ssl 认证,我正在尝试将所有非 ssl 流量重定向到 ssl。目前,我正在使用以下内容重定向工作正常的非子域 url。
server {
listen 80;
server_name mydomain.com;
#Rewrite all nonssl requests to ssl.
rewrite ^ https://$server_name$request_uri? permanent;
}
Run Code Online (Sandbox Code Playgroud)
当我对 *.mydomain.com 做同样的事情时,它在逻辑上会重定向到
https://%2A.mydomain.com/
Run Code Online (Sandbox Code Playgroud)
你如何将所有子域重定向到它们的 https 等价物?
cad*_*dmi 55
就这样...
server {
listen 80;
server_name *.mydomain.com;
#Rewrite all nonssl requests to ssl.
return 301 https://$host$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
NGINX 官方文档鼓励使用 return 指令而不是使用 rewrite 指令来实现重定向。之所以如此,是因为被重写的请求并不适用于该服务器,但它仍然在该服务器块中得到处理。因此,可以使用 return 指令正确完成重定向,因为所有处理都会停止并立即发送响应。NGINX 不鼓励在这里重写重定向: http: //nginx.org/en/docs/http/converting_rewrite_rules.html
return 指令的语法为: return code URL; 由于您最初是进行永久重写,因此您可以使用 301 作为响应代码,表示这是永久重定向。您的 https 地址将在 url 部分传递。参考:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return
所以你的正确配置是
server {
listen 80;
server_name *.mydomain.com;
#Redirect all nonssl requests to ssl.
return 301 https://$server_name$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
这可能会让您使用通配符服务器块正确重定向到您的 ssl 域。您还可以按照上面评论中的建议尝试使用下划线通用服务器名称“_”或 $host。让我们知道!
归档时间: |
|
查看次数: |
47652 次 |
最近记录: |