2017-10-16 237 views
0

类型:https://example.com =>SSL OK 但是类型:www.example.com和example.com是http 没有重定向 HTTPS。 (www重定向到非www)。重定向HTTP到HTTPS从Nginx的不工作

的WordPress地址(URL)及网站地址(URL):HTTPS // example.com

/etc/nginx/conf.d/example.com.conf

server { 
listen 80; 
server_name example.com www.example.com; 
return 301 https://$server_name$request_uri; 
} 
server { 
listen 443 ssl; 
server_name example.com www.example.com; 
ssl on; 
ssl_certificate /etc/nginx/ssl/cert_chain.crt; 
#ssl_CACertificate_File /etc/nginx/ssl/example.com.ca-bundle; 
ssl_certificate_key /etc/nginx/ssl/example.com.key; 
access_log off; 
# access_log /home/example.com/logs/access_log; 
error_log off; 
# error_log /home/example.com/logs/error.log; 
add_header X-Frame-Options SAMEORIGIN; 
add_header X-Content-Type-Options nosniff; 
add_header X-XSS-Protection "1; mode=block"; 
root /home/example.com/public_html; 
include /etc/nginx/conf/ddos2.conf; 
index index.php index.html index.htm; 
server_name example.com; 

如何解决它呢? 对不起我英文不好,谢谢。

+0

您是否在服务器配置中启用了https支持? – LethalProgrammer

+0

是的,我确实启用了。 –

回答

0

你的配置不清楚,你最后有一个重复的server_name example.com行。

尝试使用此:

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 
    server_name example.com www.example.com; 
    return 301 https://$server_name$request_uri; 
} 
+0

我尝试了它,并删除了重复代码'server_name example.com'。重启nginx的,但我的问题仍然是 –

+0

'#服务nginx的重新启动 nginx的:[警告]上0.0.0.0:80冲突的服务器名 “example.com”,忽略 nginx的:[提醒]冲突的服务器名“www.example.com “在0.0.0.0:80上,忽略 nginx:[警告]冲突的服务器名称”example.com“在0.0.0.0:80上,忽略 停止nginx:[OK] nginx:nginx:[warn]冲突的服务器名称“example.com” 上0.0.0.0:80,忽略 nginx的:[警告]上0.0.0.0:80冲突的服务器名 “www.example.com”,忽略 nginx的:[提醒]冲突的服务器名“example.com “关于0.0.0.0:80,ignored' –

+0

的支票,你只能有一个'{服务器80听...'你可以先尝试只是想我放在这里,后来让别人块,使用'nginx的-t'测试config – nbari

0

嗨尝试使用此代码

它会帮助你重定向到https 说你进入http://www.example.com会重定向到https://www.example.com
另外,如果有人进入HTTP: example.com会重定向到https://www.example.com
<VirtualHost *:80> ServerName www.example.com DocumentRoot /usr/local/apache2/htdocs Redirect permanent/https://www.example.com/ </VirtualHost> <VirtualHost_default_:443> ServerName www.example.com DocumentRoot /usr/local/apache2/htdocs SSLEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteRule (.*) https://www.example.com/$1 [R=301,L] RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule (.*) https://www.example.com/$1 [R=301,L] </VirtualHost>

0

这可能是由模糊的服务器名称造成的。尝试使用以下内容:

server { 

    server_name example.com www.example.com; 
    listen 80; 
    listen 443 ssl; # Listen for SSL at port 443 as well 

    # ... other config - certificates and such 

    # If a user tries to come through http, redirect them through https 
    if ($scheme != "https") { 
     return 301 https://$host$request_uri; 
    } 
} 

您可以通过运行sudo nginx -t来检查您的nginx配置。