本文目录
- 前言
- 一、检查 linux 服务器上的 nginx 是否安装 ssl 模块
- 二:为 nginx 安装 ssl 模块
- 三、nginx 开启 443 端口监听(https配置)
- 成功配好后的效果如下
- 遇到的问题一:证书无效
- 遇到的问题二:连公司的网络走 https 能访问项目、外网无法访问项目
前言
最近有个项目需要上线到浙政钉工作台,那边要求项目走 https 访问,但是服务器没有进行相应的配置一直都是走的 http,于是乎对服务器进行的一番配置,注明:linux 服务器 ,记录一下相关的踩坑记录,以及完整版的成功配置流程。
一、检查 linux 服务器上的 nginx 是否安装 ssl 模块
各位找到各自服务器上的 nginx 安装目录,下面有个 sbin 文件夹,来到 sbin 目录下执行 ./nginx -V命令,注意是大写的 v,小写的 v 只会展示 nginx 的版本号信息。执行完出现下图圈红的这些信息说明 ssl 模块已经安装过了。可以忽略下文的 ssl 模块安装的相关内容,直接看 nginx 配置的内容。
cd /usr/local/nginx/sbin
./nginx -V
二:为 nginx 安装 ssl 模块
找到我们的 nginx 安装解压包,我这里是放在 /usr/local/software 目录下,然后执行如下命令进入到 nginx-1.18.0 目录下。
cd /usr/local/software/nginx-1.18.0
来到 ngixn-1.18.0 目录 然后依次执行如下这三条命令
./configure --with-http_ssl_module
make
make install
由于我已经安装过了给大家看一下我当时执行的历史命令,也是这些。
安装好 ssl 之后,我们发现 nginx-1.18.0 安装包的 objs 目录下有如下这些文件,直接拷贝到 nginx 安装目录下的 sbin 文件夹下面。
nginx 默认的安装路径一般都在 /usr/local/nginx 这个位置,拷贝完成后 sbin 目录长这样。
到此 nginx ssl模块安装成功,切回 nginx 的安装目录接着执行如下命令,发现已经安装成功了。
cd /usr/local/nginx/sbin
./nginx -V
三、nginx 开启 443 端口监听(https配置)
由于 https 默认是走 443 端口的,于是我们需要在 nginx.conf 中配置 443端口的监听,然后里面配置证书路径配一下就好了,这里我是用的 pem 证书。
server {
listen 80;
server_name 你的域名;
#return 301 https://$server_name$request_uri;
location / {
index index.html;
alias /usr/local/nginx_static/dist/;
#autoindex on;
}
location /fmphone {
index index.html;
alias /usr/local/nginx_static/dist2/;
}
}
server {
listen 443 ssl;
server_name 你的域名;
ssl_certificate 证书linux绝对路径;
ssl_certificate_key 证书linux绝对路径;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH;
ssl_protocols TLSv1;
ssl_prefer_server_ciphers on;
}
由于我这里有些项目需要接着走 http ,有些项目走 https ,我并没有开启全局 http 转 https ,也就是没有放开这行代码。这里需要注意的是,当放开这行代码后,监听 80 端口的 service 里面的 location 就会失效,因为请求全转发到 443 端口了,对应的 location 也要挪到 443 对应的那个 service 里面。我这里 location 写到了 80 端口对应的 service 里面是因为,我有些项目要走 http 有些要走 https,配的 http 与 https 共存(他们都是用的 80 service 里面的location),一个项目既可以通过 http 访问,也可以通过 https 访问,对应的 location 只能写到 80 对应的 service 里面,写到 443 对应的 service 会失效。这里大家需要注意一下哦。
return 301 https://$server_name$request_uri;
成功配好后的效果如下
可以看到走 https 访问连接是安全的了。
遇到的问题一:证书无效
当我们都配置好后,发现走 https 能正常访问项目,但是居然还提示是不安全的连接?这种情况我们只需要点不安全几个字,查看证书就好了,查看证书有效期,发现原来是我的证书过期了,一万个草泥马涌上心头,在这里,我们需要注意对应证书对应的域名是不是一致的,证书对应的域名=证书查看器后面那一坨。如果不一致会爆你证书与域名不匹配的错。
遇到的问题二:连公司的网络走 https 能访问项目、外网无法访问项目
一开始我连着公司的一个 wifi 测试发现一切正常,第二天上班一觉醒来,发现项目无法访问了,找了一上午原因,无意间换了个 wifi 诶嘿居然又正常了,换另外一个 wifi 诶嘿又不正常了,于是乎我就想到 wifi 有鬼,一个是内网 wifi 一个是外网 wifi。
这种一般都是防火墙的问题,我们先排查一下 linux 服务器防火墙是否拦截了 443 端口。执行如下命令
systemctl status firewalld
可以看到物理防火墙压根都没开启。于是乎你真就觉得不是防火墙的问题了吗?
linux还有一个云防火墙呢,反馈给领导让他去联系运维人员去配置云防火墙开启对外网访问的支持。
🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹到此终于又可以安心睡大觉了🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹