我在 nginx 服务器上运行了 3 个域名,并且使用了 SSL
域名.pw 域名.info 域名.mobi
我已经启用了 sni,并且为每个站点使用一个 vhost。
该网站的主机记录都是这样的
A Record: @ <IP ADDRESS> 1800
A Record: www <IP ADDRESS> 1800
conf 文件都是这样的。除了一个问题外,它们基本上都按预期完成工作(我稍后会详细说明,现在我将解释您在下面看到的配置文件)
步骤 1 server_name
(第一条评论)将 www 流量重定向到非 www
步骤 2server_name
将端口 80 上的 http:// 流量重定向到 https://
步骤 3server_name
是通过 ssl 从端口 443 提供页面服务的实际服务器代码。
log_format www.domain.pw '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#redirects www traffic to domain.pw
server {
server_name www.domain.pw;
rewrite ^(.*) https://domain.pw$1 permanent;
}
#redirect http traffic to https
server {
listen 80;
server_name domain.pw;
return 301 https://$server_name$request_uri;
}
#server and ssl configuration.
server {
listen 443;
server_name domain.pw;
index index.php;
root /home/wwwroot/www.domain.pw;
ssl on;
#enables SSLv3/TLSv1, but not SSLv2 which is weak and should no longer be used.
ssl_protocols SSLv3 TLSv1.2;
#Disables all weak ciphers
ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
ssl_certificate /usr/local/nginx/ssl/domains/domain.pw.crt;
ssl_certificate_key /usr/local/nginx/ssl/domains/domain.pw.pem;
include other.conf;
location ~ .*\.(php|php5)?$
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
access_log /home/wwwlogs/www.domain.pw.log www.domain.pw;
error_page 404 = /access_denied.php;
error_page 403 = /access_denied.php;
}
问题
www.domain.info
重定向至https://domain.info
www.domain.mobi
重定向至https://domain.mobi
www.domain.pw
重定向至https://domain.info
<<< 哎呀!这是什么鬼?>>>
笔记:此问题仅在www
重定向没有工作正常时存在。
请帮忙,这个事情已经困扰我好几天了,我弄乱了我的配置文件,重新启动了我的服务器,重新颁发了我的 SSL 证书,但无论如何总是导致错误。为什么?
答案1
您的 HTTP 到 HTTPS 重定向存在微妙错误:
return 301 https://$server_name$request_uri;
这使用块中定义的服务器名称server
,这可能不是您想要的,特别是当您使用单个server
块来重定向多个域时。
相反,使用:
return 301 https://$http_host$request_uri;
这将使用客户端提供的域。