Nginx配置Https

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值