我的网络服务器支持以下两个子域:
我想创建我的 nginx 配置以便:
- http://en.example.com$请求uri =>https://en.example.com$请求uri
- http://www.example.com$请求uri =>https://www.example.com$请求uri
- 独立于 http 或 https 的每个其他子域 =>https://www.example.com$请求uri
我在网上找不到任何可以解决这个问题的方法。有人能帮我提供正确的 nginx 配置吗?
答案1
首先,您应该明白,如果您的 SSL 证书不支持域,则无法进行从https://something.example.com
到 的“透明”https 重定向。访问时将显示错误或类似信息。但是,您应该能够毫无困难地从 到 重定向。为此,请在 顶部添加以下内容:https://www.example.com
something.example.com
Your connection is not secure
http://*.example.com
https://www.example.com
nginx.conf
server {
listen 80;
default_server;
server_name _;
return 301 https://www.example.com$request_uri;
}
它应该将任何对你的 IP 的请求重定向到https://www.example.com
然后我们添加特定重定向的配置。这个是针对http://en.example.com
-> 的配置https://en.example.com
:
server {
listen 80;
server_name en.example.com;
return 301 https://en.example.com$request_uri;
}
这个针对http://www.example.com
-> https://www.example.com
:
server {
listen 80;
server_name www.example.com;
return 301 https://www.example.com$request_uri;
}
最后,我们为应通过 SSL 提供所需内容的“真实”域添加配置。这一项适用于http://www.example.com
:
server {
listen 443 ssl;
ssl_certificate /etc/ssl/www.example.com.crt;
ssl_certificate_key /etc/ssl/www.example.com.key;
server_name www.example.com;
<your www.example.com server config here>
...
</your www.example.com server config here>
}
此款适用于http://en.example.com
:
server {
listen 443 ssl;
ssl_certificate /etc/ssl/en.example.com.crt;
ssl_certificate_key /etc/ssl/en.example.com.key;
server_name en.example.com;
<your en.example.com server config here>
...
</your en.example.com server config here>
}