Nginx:一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在一个BSD-like 协议下发行,其特点是占有内存少,并发能力强。
Https:安全套接字层超文本传输协议,它在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密,默认端口为443。
SSL/TLS:为网络通信提供安全及数据完整性的一种安全协议,TLS与SSL在传输层对网络连接进行加密,提供如下服务:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
SSL证书是一种数字证书,它能够使用 SSL/TLS协议在浏览器和 Web 服务器之间建立一条安全通道。
一、SSL证书
要想使用https进行通信,首先需要获得SSL证书,有两种方式:
1)申请证书
可以向证书颁发机构或云服务提供商进行申请,有免费和收费两种。
2)使用openssl生成证书
该证书生成方式如下:
1、在当前目录生成一个名为server(名称自定义)的RSA私钥文件
$ openssl genrsa -des3 -out server.key 1024
生成密钥文件的过程中需要输入密码,需暂时记住该密码,后续会用到。
2、生成一个不需要输入密码的密钥文件
建议先对原密钥文件进行备份,如
cp server.key server.key.org
然后使用备份的密钥文件进行生成,如
openssl rsa -in server.key.org -out server.key
3、生成证书的申请文件
使用openssl命令在当前目录下,生成一个申请文件server.csr(文件名自定义)
$ openssl req -new -key server.key -out server.csr
在生成证书申请文件过程中会提示输入一些信息,如下:
Enter pass phrase for root.key: #输入前面创建的密码
Country Name (2 letter code) [AU]:CN #国家代号,中国输入CN
State or Province Name (full name) [Some-State]:BeiJing #省的全名,拼音
Locality Name (eg, city) []:BeiJing #市的全名,拼音
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. #公司英文名
Organizational Unit Name (eg, section) []: # 可以不输入
Common Name (eg, YOUR name) []: xxx
Email Address []:admin@mycompany.com #电子邮箱,可随意填
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: #可以不输入
An optional company name []: #可以不输入
4、签发生成证书
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
以上即生成了一个自己签发的证书。
二、配置Nginx
打开Nginx的配置文件nginx.conf,向其中添加https配置,如下:
server {
listen 443 default ssl; #监听443端口
server_name your-domain-name; #域名
ssl on; #开启ssl
ssl_certificate /etc/nginx/ssl/server.crt; #上传或生成证书的位置
ssl_certificate_key /etc/nginx/ssl/server.key; #上传或生成私钥的位置
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5; #密码加密方式
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #支持协议
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
三、启动Nginx
/usr/sbin/nginx -s reload
此时nginx正常启动,即可使用https访问web站点。
四、注意事项
1、如果在启动过程中报"ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37错误,是nginx缺少http_ssl_module模块导致的,需要在编译安装configure时带上–with-http_ssl_module配置。
2、如果nginx使用docker方式进行部署,需要对443端口进行映射,如下:
1)获取容器ip
$ docker inspect [container_name] | grep IPAddress
2)添加转发规则
$ iptables -t nat -A DOCKER -p tcp --dport [host_port] -j DNAT --to-destination [docker_ip]:443
其中[host_port]为要映射的主机端口。
参考:
https://www.cnblogs.com/jingxiaoniu/p/6745254.html
https://blog.youkuaiyun.com/keketrtr/article/details/78580717
https://aotu.io/notes/2016/08/16/nginx-https/index.html