为响应“https时代”的到来,我公司决定将http升级成https,网上资料一大把,但是没有一个比较全面的。
参考博客地址:
https://www.williamyao.com/index.php/archives/1397/
http://www.cnblogs.com/piscesLoveCc/p/6120875.html
http://www.open-open.com/lib/view/open1451624143370.html
1、因nginx默认不支持https,故需要重新编译nginx,加上--with-http_ssl_module
1.1、下载openssl
wget http://www.openssl.org/source/openssl-1.0.0d.tar.gz tar zxvf openssl-1.0.0d.tar.gz
1.2、nginx -V 查看目前nginx编译选项,然后在新版本nginx下 执行,注意添加--with-openssl=../openssl-1.0.0d 和 --with-http_ssl_module 选项
./configure --user=www --group=www --prefix=/mt/server/nginx --with-http_stub_status_module --with-openssl=../openssl-1.0.0d --without-http-cache --with-http_ssl_module --with-http_gzip_static_module --with-...
1.3、编译,千万不要makeinstall
make
1.4、之后会看在当前目录生成objs文件,执行
./objs/nginx -V
得到如下信息
nginx version: nginx/1.8.0 built by gcc 4.1.2 20080704 (Red Hat 4.1.2-55) built with OpenSSL 1.0.0d 8 Feb 2011 //表明已支持ssl TLS SNI support enabled //表明已支持多域名访问
1.5、备份原来的nginx,替换新的nginx
mv /mt/server/nginx/sbin/nginx /mt/server/nginx/sbin/nginx.old cp ./objs/nginx /mt/server/nginx/sbin/nginx
1.6、测试
/mt/server/nginx/sbin/nginx -t
1.7、测试成功之后,更新
make upgrade
1.8、此时再次nginx -V查看,应该与1.4得到的信息一致。nginx增加https支持成功
2、申请https证书,参考:https://www.williamyao.com/index.php/archives/1397/
目前只有https://www.startssl.com唯一一个提供免费证书的CA机构,所以,如果对证书要求不高,且不想花钱的童鞋,就在这儿申请吧。具体步骤:
2.1、首先访问 StartSSL.com 点击 Sign-up 进行注册
选择国家,填写邮箱,获取验证码注册。
2.2、验证域名
选择上面的Validations Wizard,启动验证向导,在下面选择Domain Validation对域名进行验证,点击继续,来到下一步
输入想要验证的域名,可以是顶级域名或二级域名,下一步
这里还会遇到个问题,如果你的域名服务商为你开启了隐私保护,那么这里的域名所有者邮件地址一般情况不会查询到真正可操作的邮箱,比如阿里云的域名隐私保护如果开启了,列表中第一个邮箱会是以阿里云结尾的一个伪装邮箱,经测试,这个邮箱是无法收到任何邮件的(本以为会代为转发),所以在进行这一步之前,一定要暂时关闭隐私保护。
2.3、获取证书
重新回到控制面板,选择上面的Certificates Wizard启动证书申请向导,SSL/TLS Certificate
2.4、增加你的域名,下面单选款选第一个,自己生成。
2.5、点击StartComTool.exe下载csr生成器,双击运行
如果文本框里已经有内容了,就点一下Clear
直接点击下方绿色的Generate CSR按钮,在弹出的对话框中选择路径,保存相关文件(比如给文件起名叫 app.williamyao.com.key),这一步工具会自动为我们生成两个名称相同的文件,一个是 CSR,一个是 Key,这两个文件都要保存好,一个是签名内容(csr格式),一个是密钥文件,密钥文件在下一步配置 Nginx 时会用到。
然后,将文本框中的 CSR 内容复制粘贴到浏览器的文本框中(直接点“Copy”按钮,回到浏览器粘贴即可)
2.6、下载证书,如果正常,证书已生成完毕。
下载证书。得到一个zip,里面有ApacheServer.zip、IISServer.zip、NginxServer.zip、OtherServer.zip这几个zip文件,按照自己的服务器不同,使用不通zip包。
我们用的nginx,故使用NginxServer.zip,里面有一个crt文件。将此crt文件和之前StartComTool.exe生成crt时同时生成的那个key文件上传到nginx所在的服务器。
3、配置nginx.conf
server { listen 443 ssl; server_name www.williamyao.com; # SSL 支持配置如下 ssl_certificate /etc/ssl/private/www.yourdomain.com.crt;#之前上传的crt文件 ssl_certificate_key /etc/ssl/private/www.domain.com.key;#之前上传的key文件 ...(其他配置)... } server { listen 80; server_name www.yourdomain.com; return 301 https://www.yourdomain.com$request_uri; }3.1、优化ssl配置,在监听443端口的server里面添加下面配置。参考: http://www.cnblogs.com/piscesLoveCc/p/6120875.html
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;3.2、如要是用proxy_pass,跳转http服务集群,可安装原来http的配置方式不需要修改
upstream parkingphone { ip_hash; server 10.255.8.50:1061; server 10.255.8.51:1061; server 10.255.8.52:1061; } server { listen 443 ssl; //server_name、ssl、access_log等等配置,已略 location /parkingphone/ { index index.jsp index.html index.htm *.css; proxy_pass http://parkingphone; } }4、配置后遇到的问题解决 4.1、网站无法访问的问题,我的原因是服务器端口没有打开 a、打开服务器iptables端口443 b、打开网络路由端口443外网可访问。 4.2、有些页面里面引入了别的网站的连接,比如我的网站中引入了高得地图,之前使用http引入的。但是,现在升级成https后,地图加载不出来了,我测试了下使用https访问地图也可以访问到。 所有我把原来项目中引入的连接全改成https了,问题解决。 原来引入方式:
<script type="text/javascript" src="http://cache.amap.com/lbs/static/es5.min.js"></script>现在引入方式:
<script type="text/javascript" src="https://cache.amap.com/lbs/static/es5.min.js"></script>over!!!