花门楼前见秋草,岂能贫贱相看老。这篇文章主要讲述编译安装Nginx,实现多域名 HTTPS相关的知识,希望能为你提供帮助。
nginx支持基于单个ip实现多域名的功能,并且还支持单ip多域名的基础之上实现HTTPS,其实是基于Nginx的SNI(Server Name Indication)功能实现,SNI是为了解决一个Nginx服务器内使用一个ip绑定多个域名和证书的功能,其具体功能是客户端在连接到服务器建立SSL链接之前先发送要访问站点的域名(Hostname),这样服务器再根据这个域名返回给客户端一个合适的证书。
- 编译安装Nginx1.18
编译安装Nginx1.18之前,需先安装gcc、pcre-devel、openssl-devel和zlib-devel这四个依赖包。
根据习惯,我们可提前创建Nginx服务的专有用户nginx。
1.2 下载源码包
Nginx源码包可通过官网(下载选择界面:??https://nginx.org/en/download.html??)下载,目前已更新到1.21.6版本,官方提示1.20.2版已成为稳定版,不过实际生产中更建议使用略低于官方稳定版的Nginx源码包,笔者这边就下载1.18来进行后续操作。
1.3 解压并运行configure脚本
解压已下载的Nginx源码包,进入已解压的包目录下可查看到有一个configure脚本文件,利用configure脚本可指定Nginx的安装路径、服务的默认用户和组、编译安装时需带有哪些特性等。
1.4 编译安装
执行make命令进行编译,编译完成后,objs目录下会多出一个nginx程序文件,利用该文件可查看到现有的版本已经configure环节使用了哪些选项等,如果后期想要添加其他特性或者进行平滑升级等,也可在此基础上重新进行编译。
执行make install命令进行安装,由于Nginx服务并不大,所以编译安装环节会比较快。
1.5 修改权限及创建软链接
configure环节指定安装路径为/apps/nginx,但相关文件属主和属组为root,需改为nginx。为了方便开启或关闭服务,通常我们是需要生成PATH变量的,但Nginx服务安装后只有一个程序文件,因此直接对程序文件创建一个软链接即可。此时,直接执行nginx命令即可开启服务。
1.6 创建service文件
Nginx服务在编译安装完成后,虽然可直接通过nginx相关命令来进行服务的开启或关闭等,但并不符合我们使用服务的习惯,无法做到开机自启动等,因此可以考虑创建一个service文件。
由于service文件中要包含pid文件路径,默认的pid路径为/apps/nginx/logs/nginx.pid,显得有点不伦不类,可以在/apps/nginx目录下创建一个run子目录(注意要修改属主和属主),并在配置文件中将pid默认路径指向该目录。
service文件内容可参考yum方式安装的Nginx对应文件部分,创建完毕后重新加载服务,由于笔者在编译安装完成后已经开启了Nginx服务,关闭进程后即可利用传统的systemctl方式来开启服务,并做到开机自启动。
- 单个ip实现多域名
2.1 创建子配置文件存放路径
单个ip实现多域名中,各域名部分的配置信息可以在Nginx服务的配置文件中添加,不过会显得十分冗长,因此可以考虑将各个域名对应的配置文件单独存放。例如可以创建一个/apps/nginx/conf.d/目录,并在Nginx配置文件的http语句块中声明需要从新创建的目录下去找对应的conf文件。
2.2 创建子配置文件
PC端和手机端网站的配置文件是在上面一步创建的目录下单独存放的,因此要创建两个子配置文件,各自的配置文件中需指明主机所对应的端口、域名和网页文件路径。由于笔者这边是将网页文件路径放在/data目录下的,尚不存在,故需手动创建。
2.3 测试环节
此时客户端使用curl命令去访问PC端和手机端的网站,能正常显示对应主页中的内容。修改电脑中hosts文件后,也能在网页中查看对应域名的主页内容。
- 单个ip实现多域名HTTPS
3.1 PC端
3.1.1 脚本实现自签名证书
在/apps/nginx/conf.d/目录下创建子目录ssl用于存放证书,进入到ssl目录下,创建脚本来进行自签名证书的颁发,脚本内容如下:
执行完certs.sh脚本会生成5个证书相关文件,可以将服务器证书johnnyfang.com.crt和CA证书ca.crt合并到一块,注意服务器证书要放在CA证书前面。为了方便管理,也可将私钥部分进行改名,此时ssl目录下的两个www开头文件就是PC端网站所需使用的证书文件。
3.1.2 PC端HTTPS设置
PC端在实现多域名环节已经创建了pc.conf子配置文件,此时根据PC端证书相关文件来进行HTTPS设置,内容如下图,保存内容后重启Nginx服务。
3.1.3 测试环节
客户端执行curl https://www.johnnyfang.com -k命令可以查看到PC端网页的主页显示内容,在浏览器中也能查看对应内容。
3.2 手机端
3.2.1 脚本实现自签名证书
与PC端相同,我们可以创建脚本来进行手机端网站的自签名证书颁发,需要注意的是,手机端将服务器证书文件和CA证书合并后(合并时也要将服务器证书放在CA证书之前),要改成pem为后缀的文件。
3.2.2 手机端HTTPS设置
根据已创建的手机端相关证书,在实现多域名环节创建的手机端配置文件中进行HTTPS设置,内容如下图,保存配置文件后重启Nginx服务。
3.2.3 测试环节
客户端执行curl https://m.johnnyfang.com -k命令,或在浏览器中查看,均能正常显示手机端网页主页内容。
【编译安装Nginx,实现多域名 HTTPS】
推荐阅读
- Nginx模块介绍及指定配置项含义
- 运维小白成长记——第十六周
- 拔掉网线后, 原本的 TCP 连接还存在吗()
- Java 并发编程实战-创建和执行任务的最佳实践
- k8s集群service流量服务代理5大严肃思考()
- 在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么()
- Python 工匠(使用数字与字符串的技巧)
- Azure Virtual Desktop 快速上手--AZURE AD JOIN
- Mac配置Java环境变量