Nginx 配置 SSL
2013-05-11 by dongnan
开始之前
SSL证书作用有两个,实现加密传输,认证服务器身份。
加密传输
用户通过http协议访问网站时,浏览器和服务器之间是明文传输, 这就意味着用户填写的密码、帐号、交易记录等机密信息都是明文,随时可能被泄露、窃取、篡改,被黑客加以利用。
使用SSL证书后,使用https加密协议访问网站,可激活客户端浏览器到网站服务器之间的"SSL加密通道"(SSL协议) ,实现高强度双向加密传输,防止传输数据被泄露或篡改。
认证服务器身份
网站部署全球信任的SSL
证书后,浏览器内置安全机制实时查验证书状态,通过浏览器向用户展示网站认证信息,让用户轻松识别网站真实身份,防止钓鱼网站仿冒。
操作步骤
准备SSL证书
我这里使用的是域名服务商签发的SSL证书,如果你没有合法可信任的SSL证书,可以向服务商索取免费的SSL证书,或者搜索签发私有证书方法。
file ssl/domain.*
domain.crt: PEM certificate
domain.key: PEM RSA private key
配置Nginx
配置文件:
cat /etc/nginx/conf/default.conf
server {
listen 80;
listen 443 ssl; # listen ssl port
server_name www.demo.com;
index index.shtml index.html;
root /var/www/html;
# ssl configure
ssl on;
ssl_certificate ssl/domain.crt;
ssl_certificate_key ssl/domain.key;
# force ssl
error_page 497 https://$server_name$request_uri;
# proxy processing error_page
error_page 404 /404.html;
location ^~ /attachments {
alias /star/uploads/;
expires 180d;
}
location ^~ /static {
alias /star/static/;
expires 180d;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
#proxy_set_header Host $host;
proxy_pass http://unix:/var/run/django.socket;
proxy_redirect default;
}
access_log /var/log/nginx/access.log access;
error_log /var/log/nginx/error.log;
}
重启Nginx服务
nginx -t && nginx -s reload
SSL相关指令
SSL
语法: ssl on | off;
默认值: ssl off;
使用字段: http, server
功能: 开启SSL功能,nginx建议使用listen 指令代替这个指令。
SSL_CERTIFICATE
语法: ssl_certificate file;
默认值: 无
使用字段: http, server
功能: 指定PEM格式的证书文件。
SSL_CERTIFICATE_KEY
语法: ssl_certificate_key file;
默认值: 无
使用字段: http, server
功能: 指定PEM格式的密钥的文件。
小结
最后来总结下文章中的知识点
- Nginx使用
ssl_certificate
、ssl_certificate_key
、listen 443 ssl
指令,配置SSL功能。 - SSL证书可以向服务商索取免费证书或者使用
openssl
签发私有证书文件。 - SSL证书格式可以转换,对于nginx 使用
crt
证书文件与key
私钥文件。