适用的场景
在同一个服务器IP上用nginx配置两个不同的域名,每个域名各自都配有安全证书,现在想访问不同的域名进入不同的网站。
整体思路
给每个域名创建一个独立的.conf配置文件,在里面写入各自nginx配置的server块的内容。然后并在默认配置文件nginx.conf中进行引用集成就好了。
详细操作
- 在 nginx 安装目录中创建名为 sites-available 的文件夹,例如: C:\nginx\sites-available。
- 在该目录下创建两个 .conf 文件分别代表每个站点的 Nginx 配置文件,例如:site1.conf 和 site2.conf。
- 编辑 site1.conf文件,添加以下内容:
server {
# https监听443默认端口,加上域名
listen 443 ssl;
server_name www.site1.com;
# 前端静态页面存放位子
root /www/site1;
index index.html;
# 安全证书
ssl_certificate /tools/nginx/conf/safety/www.site1.com.pem;
ssl_certificate_key /tools/nginx/conf/safety/www.site1.com.key;
# 根据/api/请求转发到后端接口(跟据自己项目来,我的是前后端分离的项目)
location /api/ {
proxy_pass http://127.0.0.1:8000;
}
}
- 编辑 site2.conf文件,添加内容同上只是域名、前端静态页面位子、证书位子、后端端口不同,改成自己存放的位子即可。
- 在 nginx 安装目录中创建名为 sites-enabled 的文件夹,例如:C:\nginx\sites-enabled。
- 将 sites-available 目录中的配置文件链接到 sites-enabled 目录中。使用以下命令:
mklink "C:\nginx\sites-enabled\site1.conf" "C:\nginx\sites-available\site1.conf"
mklink "C:\nginx\sites-enabled\site2.conf" "C:\nginx\sites-available\site2.conf"
为什么要搞这个链接,而不是直接把文件放到sites-enabled下,因为默认的default配置文件就是如此。
- 创建一个 nginx.conf 文件并将其放置在 Nginx 安装目录中, 例如:C:\nginx\nginx.conf。也就是默认配置文件。
- 在 nginx.conf 中的 http 段落中,添加以下内容:
http {
include mime.types;
default_type application/octet-stream;
# 以下是两个站点的配置文件引用
include sites-enabled/site1.conf;
include sites-enabled/site2.conf;
}
- 保存并重启nginx配置文件就OK了。
另外配置了https访问也别忘了配置下http的80端口,也就是在各自域名配置文件中加上
server {
listen 80;
server_name www.site1.com;
#将请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
}
还有一件事,要是在解析域名的时候www和不带www的都解析了记得在server_name后面两个都配置下
server {
listen 443 ssl;
server_name www.site1.com site1.com;
}