相信大家在现有项目里都会通过https访问,我们今天得教程就是通过配置nginx实现https访问。
Nginx专栏
- 手把手教你Nginx常用模块详解之ngx_http_access_module(一)
- 手把手教你Nginx常用模块详解之ngx_http_addition_module(二)
- 手把手教你Nginx常用模块详解之ngx_http_api_module(三)
- 手把手教你Nginx常用模块详解之ngx_http_gzip_module(四)
- 手把手教你Nginx常用模块详解之ngx_http_limit_conn_module(五)
- 手把手教你Nginx常用模块详解之ngx_http_upstream_module(六)
- 手把手教你Nginx常用模块详解之ngx_stream_ssl_module(七)
- 手把手教你Nginx常用模块详解之ngx_stream_upstream_module(八)
- 手把手教你Nginx常用模块详解之ngx_http_perl_module(九)
- 手把手教你Nginx常用模块详解之ngx_http_rewrite_module(十)
- 手把手教你Nginx常用模块详解之ngx_http_status_module(十一)
nginx配置HTTPS前置条件
服务器上已经安装nginx服务,已经具备http访问; nginx服务器是否已经安装ssl模块得支持; 是否已经拥有ssl证书,如果没有可以去阿里云或者腾讯云免费申请;
1,证书申请
证书申请前往阿里云SSL证书申请,选择免费证书申请即可
1,证书申请
证书申请前往阿里云SSL证书申请,选择免费证书申请即可
./nginx -V
如果看到我上图标记得 configure arguments: --with-http_ssl_module, 则已安装(可以直接跳过nginx安装ssl支持步骤,进入 nginx.conf 配置)。
3,nginx安装
3.1 nginx官网地址
下载地址:http://nginx.org/en/download.html
这里下载nginx-1.18.0稳定版tar.gz
3.2 下载tar包到服务器目录
cd /home/somnus wget http://nginx.org/download/nginx-1.18.0.tar.gz
3.3 解压安装包
tar -zxvf nginx-1.18.0.tar.gz
3.4 配置ssl模块
cd nginx-1.18.0 ./configure --prefix=/usr/local/nginx --with-http_ssl_module
我们只需要执行以上命令即可,由于我服务器上还有其他模块依赖
3.5 接下来执行命令编译
使用 make 命令编译(使用make install会重新安装nginx),此时当前目录会出现 objs 文件夹。用新的 nginx 文件覆盖当前的 nginx 文件。
3.6 命令拷贝复制
cp ./objs/nginx /usr/local/nginx/sbin/
3.7 再次查看安装的模块(configure arguments: --with-http_ssl_module说明ssl模块已安装)。
./nginx -V nginx version: nginx/1.18.0 … configure arguments: –with-http_ssl_module
4. ssl 证书部署
下载申请好的 ssl 证书文件压缩包到本地并解压(这里是用的 pem 与 key 文件,文件名可以更改)。
在 nginx 目录新建 cert 文件夹存放证书文件。
cd /usr/local/nginx mkdir cert
将我们申请得这两个文件上传至服务器的 cert 目录里。
4.1. nginx.conf 配置
编辑 /usr/local/nginx/conf/nginx.conf 配置文件:
配置 https server。
注释掉之前的 http server 配置,新增 https server:
server { listen 443 ssl; server_name somnus.test.com; ssl_certificate ../cert/somnus.test.com.pem; ssl_certificate_key ../cert/somnus.test.com.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ...... }
4.2 将 http 重定向 https
server { listen 80; server_name somnus.test.com; #将请求转成https rewrite ^(.*)$ https://$host$1 permanent; }
4.5 重启 nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
如果 80 端口被占用,可以通过kill命令来进行结束进程:
5 查看端口使用
netstat -lntp
执行看到以下结果就说明我们成功了
[root@iZi5u1azluu464tfbesf3aZ conf]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3322/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2310/sshd tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3322/nginx: master
5.1 结束nginx端口进程
5.1 查看nginx 进程命令
ps aux | grep nginx
5.2 执行结束命令
kill -9 3322
5.1 重启 nginx :
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf