我正在使用 nginx 在 DigitalOcean 上托管我的网站,我的应用程序可以支持域和子域请求。
域名定向的工作方式如下:
http://example.com
-> https://example.com
http://www.example.com
-> https://example.com
http://subdomain.example.com
->https://subdomain.example.com
子域名部分是动态的,所以我无法在 nginx 配置文件中修复子域名。
这就是我目前在我的 nginx conf 文件中的内容。
server {
listen 80 default_server;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
server {
#listen 80;
#listen [::]:80;
listen 443 ssl;
root /var/www/example.com/public;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name example.com;
#rewrite ^/(.*) https://example.com/$1 permanent;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# other stuff no relevant here
}
我已设法使第一条规则正常运行,但是无法使第二条和第三条规则正常运行:
http://subdomain.example.org
-> https://subdomain.example.org
,它似乎改为转到https://example.org
。
http://www.example.org
-> https://example.org
,转到https://www.example.org
答案1
由于您没有 的配置块subdomain.example.org
,因此 nginxdefault_server
在向子域提供请求时会使用您的块。在该块中,重定向规则将请求发送到https://example.com
。
我会使用这样的配置:
server {
listen 80 default_server;
return 404;
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 80;
server_name *.example.com;
return 301 https://$host$request_uri;
}
第一个server
块确保服务器对不存在的虚拟主机的请求返回 404。
第二个块处理主域的重定向,第三个块处理子域的重定向。
此外,您还需要虚拟服务器的块https
。