Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
HTTPS简介 SSL证书
多数支持ssl的web服务器都有一个CA列表,它们的证书会被自动接受。当一个浏览器遇到一个其授权CA并不在列表中的证书,浏览器将询问用户是否接受或拒绝连接。 制作CA证书 openssl genrsa -des3 -out ca.key 2048 ca.crt CA根证书(公钥): openssl req -new -x509 -days 365 -key ca.key -out ca.crt 制作网站的证书并用CA签名认证
openssl genrsa -des3 -out www.example.com.pem 1024 制作解密后的www.example.com证书私钥: openssl rsa -in www.example.com.pem -out www.example.com.key 生成签名请求: openssl req -new -key www.example.com.pem -out www.example.com.csr
可以在Common Name中填入网站域名,即可生产该网站的证书。 复制代码 代码如下: openssl ca -policy policy_anything -days 365 -cert ca.crt -keyfile ca.key -in www.example.com.csr -out www.example.com.crt 可能执行签名时,会出现“I am unable to access the ./demoCA/newcerts directory”问题:
解决方法: mkdir -p demoCA/newcerts touch demoCA/index.txt touch demoCA/serial echo "01" > demoCA/serial 然后,再执行签名命令即可。 基于Nginx搭建HTTPS虚拟主机 upstream sslfpm { server 127.0.0.1:9000 weight=10 max_fails=3 fail_timeout=20s; } server { listen 192.168.1.*:443; server_name 192.168.1.*; #为一个server开启ssl支持 ssl on; #为虚拟主机指定pem格式的证书文件 ssl_certificate /home/wangzhengyi/ssl/wangzhengyi.crt; #为虚拟主机指定私钥文件 ssl_certificate_key /home/wangzhengyi/ssl/wangzhengyi_nopass.key; #客户端能够重复使用存储在缓存中的会话参数时间 ssl_session_timeout 5m; #指定使用的ssl协议 ssl_protocols SSLv3 TLSv1; #指定许可的密码描述 ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #SSLv3和TLSv1协议的服务器密码需求优先级高于客户端密码 ssl_prefer_server_ciphers on; location / { root /home/wangzhengyi/ssl/; autoindex on; autoindex_exact_size off; autoindex_localtime on; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; error_page 404 /404.html; location = /50x.html { root /usr/share/nginx/www; } location = /404.html { root /usr/share/nginx/www; } # proxy the PHP scripts to fpm location ~ .php$ { access_log /var/log/nginx/ssl/ssl.access.log main; error_log /var/log/nginx/ssl/ssl.error.log; root /home/wangzhengyi/ssl/; fastcgi_param HTTPS on; include /etc/nginx/fastcgi_params; fastcgi_pass sslfpm; } } HTTPS服务器优化 保持客户端长连接,在一个SSL连接发送多个请求 会话缓存用于保存SSL会话,这些缓存在工作进程间共享,可以使用ssl_session_cache指令进行配置。1M缓存可以存放约4000个会话。默认的缓存超时时间是5m,可以使用ssl_session_timeout加大它。 语法:ssl_session_cache off|none|builtin:size|shared:name:size 优化示例 #优化ssl服务 ssl_session_cache shared:wzy:10m; #客户端能够重复使用存储在缓存中的会话参数时间 ssl_session_timeout 10m; nginx强制使用https访问(http跳转到https)
nginx的rewrite方法
配置 server { listen 192.168.1.111:80; server_name test.com; rewrite ^(.*)$ https://$host$1 permanent; }
error code 497 497 - normal request was sent to HTTPS
思路 配置 server { listen 192.168.1.11:443; #ssl端口 listen 192.168.1.11:80; #用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口 server_name test.com; #为一个server{......}开启ssl支持 ssl on; #指定PEM格式的证书文件 ssl_certificate /etc/nginx/test.pem; #指定PEM格式的私钥文件 ssl_certificate_key /etc/nginx/test.key; #让http请求重定向到https请求 error_page 497 https://$host$uri?$args; } index.html刷新网页
可以看到百度很巧妙的利用meta的刷新作用,将baidu.com跳转到www.baidu.com.因此我们可以基于http://test.com的虚拟主机路径下也写一个index.html,内容就是http向https的跳转 index.html <html> <meta http-equiv="refresh" content="0;url=https://test.com/"> </html> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |