HTTP以明文的形式在浏览器之间进行数据的交互,没有任何数据加密,很容易被攻击者拦截并读懂,这很不安全。因此现在很多浏览器都要求网站域名配置SSL证书,以HTTPS协议进行传输。HTTPS可以看作是HTTP+SSL协议,SSL依靠证书来验证服务器的身份,同时对浏览器与服务器之间通信进行加密。
SSL证书可以通过腾讯云进行免费申请,但前提是域名必须备案,证书的有效期为1年,1年后需手动再申请。
申请通过后便可下载,腾讯提供的证书可以配置到APache、Nginx和Tomcat等服务器。
nginx下配置服务器:
第一步将下载下来nginx目录下的两个证书文件上传到服务器上nginx安装目录下的conf目录中
接着修改nginx.conf
server {
listen 80;
server_name www.hsfeng.cn;
rewrite ^(.*) https://$server_name$1 permanent; #将http强制转换为https
location /upload{
alias /home/upload;
}
}
server {
listen 443;
server_name www.hsfeng.cn;
ssl on;
ssl_certificate 1_www.hsfeng.cn_bundle.crt;
ssl_certificate_key 2_www.hsfeng.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL;
location / {
proxy_set_header Host $host:443;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 解决https重定向变成http
proxy_redirect http:// https://;
proxy_pass http://project_nginx;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /upload{
alias /home/upload;
}
}
这样,便完成了nginx下https的配置,结果如下:
最后讲讲配置过程中容易忽略的地方:
1. 首先确保机器上安装了openssl和openssl-devel,一开始我没安装,nginx重启时候会报识别不出ssl。安装命令:
- #yum install openssl
- #yum install openssl-devel
2. 第二个是记得开放防火墙的443端口,https默认是443端口进行访问,Linux默认是不开放的,可使用命令 -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT,最后别忘了重启防火墙。