Nginx和httpsredirect

我尝试在https://上redirecthttp:// www &http://,但我有一个redirect循环,你知道为什么吗? 当我只把server_name www.mywebsite.lol可以httpsredirect…

我试过了

server { server_name mywebsite.lol; rewrite ^(.*) https://mywebsite.lol$1 permanent; } 

 server { server_name mywebsite.lol; return 301 https://$server_name$request_uri; } 

而我的完整:configuration

 server { # Port listen 80; # Hostname server_name mywebsite.lol; # Logs (acces et erreurs) access_log /var/log/nginx/mywebsite.lol.access.log; error_log /var/log/nginx/mywebsite.lol.error.log; # Repertoire root /home/mywebsite/www; # Fichier a executer par defaut (en ordre) index index.html index.php; pagespeed off; # Needs to exist and be writable by nginx. Use tmpfs for best performance. pagespeed FileCachePath /var/lightpics_ngx_pagespeed_cache; # Ensure requests for pagespeed optimized resources go to the pagespeed handler # and no extraneous headers get set. location ~ "\.pagespeed\.([az]\.)?[az]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; } location ~ "^/pagespeed_static/" { } location ~ "^/ngx_pagespeed_beacon$" { } pagespeed DisableFilters remove_comments; #Expire Header location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } location / { try_files $uri $uri/ /index.php?$query_string; } # pass the PHP scripts to FastCGI server listening on the php-fpm socket location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # Refuse accès httaccess location ~ /\. { deny all; } 

}

做Nginxredirect的正确方法是使用HTTP 301,而不是重写。 看到这里 。

至于你的服务器设置,请参阅下面的我的。 我在端口80上定义服务器名称,然后redirect到端口443上的HTTPS。在此HTTPS服务器块下应用了一切(SSL设置,根目录,索引等)。

 server { listen 80 default_server; #Listen on IPv4 listen [::]:80; #Listen on IPv6 server_name loganmarchione.com; return 301 https://$host$request_uri; #Redirect HTTP to HTTPS } server { listen 443 ssl spdy; #Listen on IPv4 listen [::]:443 ssl spdy; #Listen on IPv6 ssl_certificate /etc/nginx/ssl/unified2.crt; ssl_certificate_key /etc/nginx/ssl/my-private-decrypted.key; ... 

您正在获取redirect循环,因为同一个“服务器”指令正在应答http(端口80)和https(端口443)的请求,

你希望为http和https分别设置“服务器”块 – http块只能redirect到https,而https块应该包含你的主configuration,即“root”等。

 server { listen 80; server_name mywebsite.lol; rewrite ^(.*) https://mywebsite.lol$1 permanent; } server { listen 0.0.0.0:443 ssl; server_name mywebsite.lol; ssl_certificate /etc/pki/tls/certs/mywebsite.lol.crt; ssl_certificate_key /etc/pki/tls/certs/mywebsite.lol.key; # Repertoire root /home/mywebsite/www; ... }