网站海外vps的Nginx环境下https配置:强制http转https设置方法
希望,有需要的朋友能成功为自己的站点安装SSL证书。在这里为大家分享几种Nginx环境下强制http转https设置方法。
Nginx环境下强制http转https设置方法:
方法一:
下面代码照搬过去就行。无需做任何修改。春哥技术博客推荐此种方法,非常简单,改完以后实时生效,不用重启服务器。
if($scheme=http){return301https://$host$request_uri;}
方法二:
下面代码照搬过去就行。无需做任何修改。
if($server_port=80){return301https://$host$request_uri;}
方法三:
下列代码中请注意把域名修改成自己域名。
if($ssl_protocol=“”){return301https://$server_name$request_uri;}if($host!=www.enuoidc.com){return301$scheme://www.enuoidc.com$request_uri;}
――――――――――http访问强制跳转到https―――――――――C网站添加了https证书后,当http方式访问网站时就会报404错误,所以需要做http到https的强制跳转设置.
―――――一、采用nginx的rewrite方法―――――――
1)下面是将所有的http请求通过rewrite重写到https上。例如将所有的dev.wangshibo.com域名的http访问强制跳转到https。下面配置均可以实现:配置1:server{listen80;server_namewww.enuoidc.com;indexindex.htmlindex.phpindex.htm;access_log/usr/local/nginx/logs/8080-access.logmain;error_log/usr/local/nginx/logs/8080-error.log;rewrite^(.*)$https://$host$1permanent;//这是ngixn早前的写法,现在还可以使用。location~/{root/var/www/html/8080;indexindex.htmlindex.phpindex.htm;}}-------------------------------------------------------上面的跳转配置rewrite^(.*)$https://$host$1permanent;也可以改为下面rewrite^/(.*)$http://www.enuoidc.com/$1permanent;或者rewrite^http://www.enuoidc.com$request_uri?permanent;-------------------------------------------------------配置2:server{listen80;server_namewww.enuoidc.com;indexindex.htmlindex.phpindex.htm;access_log/usr/local/nginx/logs/8080-access.logmain;error_log/usr/local/nginx/logs/8080-error.log;return301https://$server_name$request_uri;//这是nginx最新支持的写法location~/{root/var/www/html/8080;indexindex.htmlindex.phpindex.htm;}}配置3:这种方式适用于多域名的时候,即访问enuoidc.com的http也会强制跳转到https://www.enuoidc.com上面server{listen80;server_namewww.enuoidc.comenuoidc.com*.enuoidc.com;indexindex.htmlindex.phpindex.htm;access_log/usr/local/nginx/logs/8080-access.logmain;error_log/usr/local/nginx/logs/8080-error.log;if($host~*"^enuoidc.com$"){rewrite^/(.*)$https://www.enuoidc.com/permanent;}location~/{root/var/www/html/8080;indexindex.htmlindex.phpindex.htm;}}配置4:下面是最简单的一种配置server{listen80;server_namewww.enuoidc.com;indexindex.htmlindex.phpindex.htm;access_log/usr/local/nginx/logs/8080-access.logmain;error_log/usr/local/nginx/logs/8080-error.log;if($host="www.enuoidc.com"){rewrite^/(.*)$http://www.enuoidc.compermanent;}location~/{root/var/www/html/8080;indexindex.htmlindex.phpindex.htm;}}―――――二、采用nginx的497状态码―――――――
497-normalrequestwassenttoHTTPS解释:当网站只允许https访问时,当用http访问时nginx会报出497错误码思路:利用error_page命令将497状态码的链接重定向到https://www.enuoidc.com这个域名上配置实例:如下访问www.enuoidc.com或者enuoidc.com的http都会被强制跳转到httpsserver{listen80;server_namewww.enuoidc.comenuoidc.com*.enuoidc.com;indexindex.htmlindex.phpindex.htm;access_log/usr/local/nginx/logs/8080-access.logmain;error_log/usr/local/nginx/logs/8080-error.log;error_page497https://$host$uri?$args;location~/{root/var/www/html/8080;indexindex.htmlindex.phpindex.htm;}}也可以将80和443的配置放在一起:server{listen127.0.0.1:443;#ssl端口listen127.0.0.1:80;#用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口server_namewww.enuoidc.com;#为一个server{......}开启ssl支持sslon;#指定PEM格式的证书文件ssl_certificate/etc/nginx/wangshibo.pem;#指定PEM格式的私钥文件ssl_certificate_key/etc/nginx/wangshibo.key;#让http请求重定向到https请求error_page497https://$host$uri?$args;location~/{root/var/www/html/8080;indexindex.htmlindex.phpindex.htm;}}―――――三、利用meta的刷新作用将http跳转到https―――――――
上述的方法均会耗费服务器的资源,可以借鉴百度使用的方法:巧妙的利用meta的刷新作用,将http跳转到https可以基于http://www.enuoidc.com的虚拟主机路径下写一个index.html,内容就是http向https的跳转将下面的内容追加到index.html首页文件内[root@localhost~]#cat/var/www/html/8080/index.html―――――――――――――――――――――――――――――――――――――――――C下面是nginx反代tomcat,并且http强制跳转至https。访问https://enuoidc.com和访问http://172.29.34.33:8080/enuoidc/结果是一样的
[root@BJLX_34_33_Vvhosts]#catzrx.confserver{listen80;server_namewww.enuoidc.com;indexindex.htmlindex.phpindex.htm;access_loglogs/access.log;error_loglogs/error.log;return301https://$server_name$request_uri;location~/{root/data/nginx/html;indexindex.htmlindex.phpindex.htm;}}[root@BJLX_34_33_Vvhosts]#catssl-zrx.confupstreamtomcat8{server172.29.34.33:8080max_fails=3fail_timeout=30s;}server{listen443;server_namewww.enuoidc.com;sslon;###SSLlogfiles###access_loglogs/ssl-access.log;error_loglogs/ssl-error.log;###SSLcertfiles###ssl_certificatessl/wangshibo.cer;ssl_certificate_keyssl/wangshibo.key;ssl_session_timeout5m;location/{proxy_passhttp://tomcat8/enuoidc/;proxy_next_upstreamerrortimeoutinvalid_headerhttp_500http_502http_503;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Protohttps;proxy_redirectoff;}}―――――四、通过proxy_redirec方式―――――――
解决办法:#re-writeredirectstohttpastohttps,example:/homeproxy_redirecthttp://https://;