我一直试图解决这个问题。
无论用户放入网址栏,我都想将所有流量重定向到https。
由于会话需要始终为NO-WWW或始终使用WWW
这是我当前的nginx配置。
我需要做些什么改变才能将所有内容重定向到https?
server {
listen 80;
listen 443;
server_name example.com www.example.com;
access_log /var/log/nginx/example-access.log;
error_log /var/log/nginx/example-error.log;
root /var/www/html/web;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$uri?$args;
}
rewrite ^/backend\.php/?(.*)$ /$1 permanent;
location /admin {
index admin content backend.php;
try_files $uri @rewriteapp;
}
location @rewriteapp {
rewrite ^(.*)$ /backend.php/$1 last;
}
location ~ "^(.+\.php)($|/)" {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
}
答案 0 :(得分:0)
您需要两个服务器块,这是nginx
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_certificate mycert.crt;
ssl_certificate_key mycert.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
... (all the locations, index and etecetras)
}
请注意,您必须listen 443 ssl
使用enable ssl
。否则nginx
将非常乐意在端口443上通过HTTP提供内容。
我没有在您的问题中看到SSL证书或允许的协议/密码,因此我将其添加到答案中以防万一。
请注意,浏览器会记住301
。一旦浏览器看到301
,它将永远重定向(或直到您销毁其缓存)。出于调试目的,最好使用302
,然后在生产中将其更改为301
。