本文共 9388 字,大约阅读时间需要 31 分钟。
分布式篇 - Nginx添加SSL实现HTTPS访问
上一篇博文给大家介绍了Nginx的安装与运行:
今天博主给大家分享如何给Nginx添加SSL,实现HTTPS访问Nginx服务,但前提条件是你的服务器有SSL,博主是阿里云的服务器,可以免费申请SSL,其他云服务器平台应该也是如此。
如果你没有安装Nginx,跟着博主一起动手即可(基本上博主的所有步骤都要进行操作,少数不需要操作的,博主会进行提示)。
如果之前已经安装好了,也不需要担心,步骤其实都是差不多的,以下几步需要注意,博主在操作之前也会进行提示:
- 确保安装了
openssl
。 - 补全
nginx
文件夹下面的文件夹和文件(不然可能没有configure
文件,就不能重新配置了)。 - 重新配置、编译(所谓重新,就是你之前安装Nginx,其实已经配置和编译过了,只不过默认配置没有添加SSL,如果你需要添加SSL,则需要修改默认配置,即重新配置,再重新编译即可),但不需要重新安装,不然会覆盖原有
nginx
文件夹下的所有文件。 - 将重新编译生成的
nginx
可执行文件替代掉原来的nginx
可执行文件(可以备份一下原来的nginx
可执行文件,避免出现问题)。 - 将SSL证书添加到
nginx
文件夹下。 - 修改Nginx配置文件,再启动或者重启Nginx服务即可。
安装依赖环境
安装gcc环境
yum install -y gcc-c++
安装prce库
yum install -y pcre pcre-devel
安装压缩和解压缩依赖
yum install -y zlib zlib-devel
安装openssl
yum install -y openssl openssl-devel
下载Nginx
Nginx下载地址:
下载稳定版(Linux系统)。
下载好后,使用Xftp将该压缩文件放到虚拟机或服务器中。解压Nginx
[root@izoq008ryseuupz ~]# cd /usr/local/[root@izoq008ryseuupz local]# lltotal 1068drwxr-xr-x 7 kaven root 4096 Jan 4 06:05 aegisdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 bindrwxr-xr-x 10 kaven root 4096 Jan 3 15:01 cloudmonitordrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 etcdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 gamesdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 includedrwxr-xr-x 7 kaven 143 4096 Oct 5 2019 jdk1.8.0_231drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 libdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 lib64drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 libexec-rw-r--r-- 1 root root 1039530 Jan 8 16:46 nginx-1.18.0.tar.gzdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 sbindrwxr-xr-x. 7 kaven root 4096 Jul 24 11:01 sharedrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 src[root@izoq008ryseuupz local]# tar -zxvf nginx-1.18.0.tar.gz
如果大家之前安装过Nginx,现在开始,就需要跟着博主一起操作了。
[root@izoq008ryseuupz local]# cd nginx-1.18.0[root@izoq008ryseuupz nginx-1.18.0]# lltotal 784drwxr-xr-x 6 kaven kaven 4096 Jan 8 18:56 auto-rw-r--r-- 1 kaven kaven 302863 Apr 21 2020 CHANGES-rw-r--r-- 1 kaven kaven 462213 Apr 21 2020 CHANGES.rudrwxr-xr-x 2 kaven kaven 4096 Jan 8 18:56 conf-rwxr-xr-x 1 kaven kaven 2502 Apr 21 2020 configuredrwxr-xr-x 4 kaven kaven 4096 Jan 8 18:56 contribdrwxr-xr-x 2 kaven kaven 4096 Jan 8 18:56 html-rw-r--r-- 1 kaven kaven 1397 Apr 21 2020 LICENSEdrwxr-xr-x 2 kaven kaven 4096 Jan 8 18:56 man-rw-r--r-- 1 kaven kaven 49 Apr 21 2020 READMEdrwxr-xr-x 9 kaven kaven 4096 Jan 8 18:56 src
如果你之前已经安装过Nginx,并且上面这些文件夹或者文件都有,就不需要管,如果有些文件夹或者文件没有,比如没有configure
文件,就需要去官网下载同版本的Nginx,将缺少的文件夹和文件补齐(各个版本的Nginx的文件结构可能不一样,大家只要和官网下载的同版本Nginx的文件结构一样即可)。
编译Nginx
先进行配置,--with-http_ssl_module
这个配置就是为了给Nginx添加SSL。
[root@izoq008ryseuupz nginx-1.18.0]# ./configure --with-http_ssl_modulechecking for OS + Linux 3.10.0-1062.18.1.el7.x86_64 x86_64checking for C compiler ... found + using GNU C compiler + gcc version: 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC) ...Configuration summary + using system PCRE library + using system OpenSSL library + using system zlib library nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx modules path: "/usr/local/nginx/modules" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
配置的目的是为了创建Makefile
文件,为后面的编译阶段提供编译文件。
[root@izoq008ryseuupz nginx-1.18.0]# ll总用量 768drwxr-xr-x. 6 1001 1001 4096 1月 7 16:24 auto-rw-r--r--. 1 1001 1001 302863 4月 21 2020 CHANGES-rw-r--r--. 1 1001 1001 462213 4月 21 2020 CHANGES.rudrwxr-xr-x. 2 1001 1001 168 1月 7 16:24 conf-rwxr-xr-x. 1 1001 1001 2502 4月 21 2020 configuredrwxr-xr-x. 4 1001 1001 72 1月 7 16:24 contribdrwxr-xr-x. 2 1001 1001 40 1月 7 16:24 html-rw-r--r--. 1 1001 1001 1397 4月 21 2020 LICENSE-rw-r--r--. 1 root root 376 1月 7 16:37 Makefiledrwxr-xr-x. 2 1001 1001 21 1月 7 16:24 mandrwxr-xr-x. 3 root root 174 1月 7 16:41 objs-rw-r--r--. 1 1001 1001 49 4月 21 2020 READMEdrwxr-xr-x. 9 1001 1001 91 1月 7 16:24 src
编译
[root@izoq008ryseuupz nginx-1.18.0]# make
之前安装过Nginx,不需要接下来的安装操作,不然会覆盖原来的Nginx,但需要下面两步来代替(之前没有安装过Nginx就不需要这两个步骤):
- 备份原有的
nginx
。
[root@izoq008ryseuupz nginx-1.18.0]# cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
- 然后将刚刚编译好的
nginx
(在objs
文件夹下)覆盖掉原有的nginx
(这个时候nginx
要是停止状态)。
[root@izoq008ryseuupz nginx-1.18.0]# cp ./objs/nginx /usr/local/nginx/sbin/cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y
安装
[root@izoq008ryseuupz nginx-1.18.0]# make install
安装之后,就会有nginx
文件夹。
[root@izoq008ryseuupz nginx-1.18.0]# cd ..[root@izoq008ryseuupz local]# lltotal 1076drwxr-xr-x 7 kaven root 4096 Jan 4 06:05 aegisdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 bindrwxr-xr-x 10 kaven root 4096 Jan 3 15:01 cloudmonitordrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 etcdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 gamesdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 includedrwxr-xr-x 7 kaven 143 4096 Oct 5 2019 jdk1.8.0_231drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 libdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 lib64drwxr-xr-x. 2 kaven root 4096 Apr 11 2018 libexecdrwxr-xr-x 6 root root 4096 Jan 8 17:33 nginxdrwxr-xr-x 10 kaven kaven 4096 Jan 8 17:29 nginx-1.18.0-rw-r--r-- 1 root root 1039530 Jan 8 16:46 nginx-1.18.0.tar.gzdrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 sbindrwxr-xr-x. 7 kaven root 4096 Jul 24 11:01 sharedrwxr-xr-x. 2 kaven root 4096 Apr 11 2018 src
添加SSL
下载SSL证书。
这里下载Nginx版的SSL证书。 创建ssl
文件夹。 [root@izoq008ryseuupz local]# cd nginx[root@izoq008ryseuupz nginx]# lltotal 36drwx------ 2 nobody root 4096 Jan 8 18:43 client_body_tempdrwxr-xr-x 2 root root 4096 Jan 8 18:46 confdrwx------ 2 nobody root 4096 Jan 8 18:43 fastcgi_tempdrwxr-xr-x 2 root root 4096 Jan 8 17:33 htmldrwxr-xr-x 2 root root 4096 Jan 8 18:43 logsdrwx------ 2 nobody root 4096 Jan 8 18:43 proxy_tempdrwxr-xr-x 2 root root 4096 Jan 8 17:54 sbindrwx------ 2 nobody root 4096 Jan 8 18:43 scgi_tempdrwx------ 2 nobody root 4096 Jan 8 18:43 uwsgi_temp[root@izoq008ryseuupz nginx]# mkdir ssl[root@izoq008ryseuupz nginx]# lltotal 40drwx------ 2 nobody root 4096 Jan 8 18:43 client_body_tempdrwxr-xr-x 2 root root 4096 Jan 8 18:46 confdrwx------ 2 nobody root 4096 Jan 8 18:43 fastcgi_tempdrwxr-xr-x 2 root root 4096 Jan 8 17:33 htmldrwxr-xr-x 2 root root 4096 Jan 8 18:43 logsdrwx------ 2 nobody root 4096 Jan 8 18:43 proxy_tempdrwxr-xr-x 2 root root 4096 Jan 8 17:54 sbindrwx------ 2 nobody root 4096 Jan 8 18:43 scgi_tempdrwxr-xr-x 2 root root 4096 Jan 8 18:41 ssldrwx------ 2 nobody root 4096 Jan 8 18:43 uwsgi_temp
将刚刚下载好的Nginx版SSL证书放到ssl
文件夹下。
修改配置文件
[root@izoq008ryseuupz nginx]# cd conf[root@izoq008ryseuupz conf]# lltotal 68-rw-r--r-- 1 root root 1077 Jan 8 17:33 fastcgi.conf-rw-r--r-- 1 root root 1077 Jan 8 17:33 fastcgi.conf.default-rw-r--r-- 1 root root 1007 Jan 8 17:33 fastcgi_params-rw-r--r-- 1 root root 1007 Jan 8 17:33 fastcgi_params.default-rw-r--r-- 1 root root 2837 Jan 8 17:33 koi-utf-rw-r--r-- 1 root root 2223 Jan 8 17:33 koi-win-rw-r--r-- 1 root root 5231 Jan 8 17:33 mime.types-rw-r--r-- 1 root root 5231 Jan 8 17:33 mime.types.default-rw-r--r-- 1 root root 2656 Jan 8 17:33 nginx.conf-rw-r--r-- 1 root root 2656 Jan 8 17:33 nginx.conf.default-rw-r--r-- 1 root root 636 Jan 8 17:33 scgi_params-rw-r--r-- 1 root root 636 Jan 8 17:33 scgi_params.default-rw-r--r-- 1 root root 664 Jan 8 17:33 uwsgi_params-rw-r--r-- 1 root root 664 Jan 8 17:33 uwsgi_params.default-rw-r--r-- 1 root root 3610 Jan 8 17:33 win-utf[root@izoq008ryseuupz conf]# vim nginx.conf
在配置文件中添加一个server
,就是监听443
端口。443
端口主要是用于HTTPS服务,HTTPS是提供加密和通过安全端口传输的另一种HTTP。
server { listen 443 ssl; #配置HTTPS的默认访问端口443。 #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。 #如果你使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。 server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。 root html; index index.html index.htm; ssl_certificate cert/cert-file-name.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。 ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #表示使用的加密套件的类型。 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。 ssl_prefer_server_ciphers on; location / { root html; #站点目录。 index index.html index.htm; }}
换成自己的域名和SSL证书即可。
启动Nginx
[root@izoq008ryseuupz conf]# cd ..[root@izoq008ryseuupz nginx]# cd sbin[root@izoq008ryseuupz sbin]# ./nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@localhost sbin]# ./nginx
./nginx 启动nginx。./nginx -t 检查nginx的配置文件是否符合要求./nginx -s stop 此方式相当于先查出nginx进程id,再使用kill命令强制杀掉进程。./nginx -s quit 此方式是待nginx进程处理完任务后,再停止nginx。./nginx -s reload 重启nginx。
现在就可以使用HTTPS来访问Nginx服务了。
使用HTTP访问Nginx服务会提示不安全。Nginx添加SSL实现HTTPS访问就介绍到这里。
写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!
转载地址:https://kaven.blog.csdn.net/article/details/112371339 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!