最近试了一下腾讯云的 SSL 服务,很好地解决了 https://www.test.com 和 http://www.test.com 同时都可以访问的问题。
要实现 HTTPS 访问,关键要有 SSL 证书,目前有些云服务商,都提供这个服务。
比如:在腾讯云中,有【SSL 证书管理】的服务,在【域名和网站】里面。具体操作如下:
然后按照页面的提示,一步一步往下走:直到:【域名身份认证】;
这里有两个选择:「手动 DNS 验证」或者「文件验证」:
一会儿之后,出现:【证书详情】。点击后,页面出现了具体在 DNS 域名解析中需要添加的 TXT 记录的内容。
过一会之后,在【SSL 证书管理】的列表中,会出现一条,右边有【下载】按钮。点击后,您就把 SSL 证书得到了。
在【下载】按钮的旁边是【详情】按钮,点击后,在【证书详情】页面,
点击:【指引文档】,将会出现一个新的帮助页面:证书安装指引 https://cloud.tencent.com/document/product/400/4143
里面有 apache, nginx, tomcat 等的配置说明。我按照 nginx 的配置操作,基本都可以用。
比如,您的 nginx 配置中,缺省的访问应用是:test_app, 其相关的配置文件是:/etc/nginx/conf.d/test_app.conf
那么,最基本的样子,如下就可以。(让 HTTPS 和 HTTP 同时访问的的步骤:注释掉:# ssl_on; )这一步就够了。
upstream test_app {
server unix:/tmp/unicorn.test_app.sock fail_timeout=0;
}
server {
listen 80 default_server;
listen 443 default_server ssl;
server_name test.com www.test.com;
# ssl on;
ssl_certificate /etc/nginx/conf.d/ssl/1_www.test.com_bundle.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/2_www.test.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
root /home/your_name/test_app/public;
try_files $uri/index.html $uri @test_app;
location @test_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://test_app;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
包括下面的各个页面,均可以正常访问了。