Nginx配置HTTP强制跳转到HTTPS的解决办法
作者:abiao1981
这篇文章主要给大家介绍了关于Nginx配置HTTP强制跳转到HTTPS的解决办法,当Nginx配置https后通常需要将用户http请求强制跳转到https,需要的朋友可以参考下
前言
https 访问我们的测试域名 https://www.xxx.com 站点,但是当我们直接在浏览器地址栏中直接输入 www.xxx.com 的时候却发现进入的是 http 协议的网站,这与我们的初衷不一致。
由于浏览器默认访问域名使用的是80端口,而当我们使用SSL证书后,网站的端口就变成了443,所以当我们直接在浏览器中输入网址 www.xxx.com 的时候进入的是 80 端口的 HTTP 站点而不是 443 端口的 HTTPS 站点。
解决方法
这里提供两种 http 跳转到 https 的方法:
1. 使用nginx的 rewrite 将请求过来的 http URL直接重写成 https
server { listen 80; #填写绑定证书的域名 server_name www.xxx.com; #强制将http的URL重写成https rewrite ^(.*) https://$server_name$1 permanent; }
2. 使用301重定向的方式将 http 的请求重定向到 https 上
server { listen 80; #填写绑定证书的域名 server_name www.xxx.com; #把http的域名请求转成https return 301 https://$host$request_uri; }
3.完整的代码
# https配置 server { listen 443 ssl; server_name www.xxx.com xxx.com; #ssl on; #开启ssl支持 ssl_certificate /data/ssl/www.xxx.com.pem; #指定服务器证书路径 ssl_certificate_key /data/ssl/www.xingguangshe.com.key; #指定私钥证书路径 ssl_session_timeout 5m; #ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #ssl_prefer_server_ciphers on; root /myweb/new/xxx.com; location / { index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; break; } } location ~ \.php/?.*$ { fastcgi_pass 127.0.0.1:9000; fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$; fastcgi_intercept_errors on; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; #fastcgi_pass php-fpm; #uquq use this } location ~ /\.ht { deny all; } } #http配置 server { listen 80; #listen somename:8080; server_name www.xxx.com xxx.com; client_max_body_size 80m; #error_page 404 /data/ymg280/404.html; #error_page 500 502 503 504 /errors/default/50x.html; rewrite ^(.*) https://$server_name$1 permanent; if ($host != 'ww.xxx.com'){ #rewrite ^/(.*)$ http://www.xxx.com/$1 permanent; } root /myweb/new/xxx.com; location / { index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; break; } } #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 location ~ \.php/?.*$ { fastcgi_pass 127.0.0.1:9000; fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$; fastcgi_intercept_errors on; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; #fastcgi_pass php-fpm; } #deny access to .htaccess files, if Apache's document root location ~ /\.ht { deny all; } }
总结
到此这篇关于Nginx配置HTTP强制跳转到HTTPS的文章就介绍到这了,更多相关Nginx强制跳转HTTPS内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!