我正在努力解决如何在我的网站上强制使用SSL(nginx)。我想强制重新定位" http://www.example.com"和" http://example.com"到" https://example.com" (没有任何www)。
我目前编写的代码可以捕获" http://www.example.com"但是没有捕获" http://example.com",似乎无限循环重定向。我很确定它与" server_name"有关。我尝试在服务器{...}"内部交换它。括号和东西,但它仍然没有我想要的方式。
这是我的nginx conf
server {
server_name www.example.com;
return 301 https://example.com$request_uri;
}
server {
server_name example.com;
root /var/www/example.com;
index index.html index.php index.htm;
location / {
include /etc/nginx/conf/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
server {
#listen 443 spdy default deferred;
ssl on;
ssl_certificate_key /etc/myssl/www.example.com.key;
ssl_certificate /etc/myssl/www.example.com.chained.crt;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-[...]';
ssl_prefer_server_ciphers on;
ssl_dhparam /usr/share/myssl/dhparams/dh2048-group14.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;
add_header Strict-Transport-Security max-age=15768000;
}
答案 0 :(得分:2)
您希望配置每个server
块以专门侦听某个端口,例如:
server {
listen 80;
server_name www.example.com example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl spdy;
server_name www.example.com;
ssl_certificate_key /etc/myssl/www.example.com.key;
ssl_certificate /etc/myssl/www.example.com.chained.crt;
[other ssl_* directives, as required]
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl spdy;
server_name example.com;
ssl_certificate_key /etc/myssl/www.example.com.key;
ssl_certificate /etc/myssl/www.example.com.chained.crt;
[other ssl_* directives, as required]
[remaining example.com configuration here]
}
这表示在HTTP(端口80)上侦听http://www.example.com和http://example.com的请求,并将其重定向到https://example.com。第二个块侦听https://www.example.com并重定向到https://example.com。然后,最后一个块侦听对https://example.com的SSL / SPDY请求。
将剩余的仅HTTPS配置添加到第二个块,该块看起来基本上是合并第二个和第三个块。
现在,示例中演示了以下内容:如果您希望服务器响应或重定向访问https://www.example.com的用户,则需要添加另一个server
数据块。因此,您可能需要第二个有效的SSL证书(一个用于www.example.com,另一个用于example.com)。或者,通配符证书或具有备用DNS名称的证书可以适用于这两种情况。
还要确保配置目录中不存在其他冲突的配置文件(例如/etc/nginx/conf.d
或/etc/nginx/sites-enabled
;具体取决于您的平台。)
编辑进行了扩展。