适用的场景

在同一个服务器IP上用nginx配置两个不同的域名,每个域名各自都配有安全证书,现在想访问不同的域名进入不同的网站。

整体思路

给每个域名创建一个独立的.conf配置文件,在里面写入各自nginx配置的server块的内容。然后并在默认配置文件nginx.conf中进行引用集成就好了。

详细操作

  1. 在 nginx 安装目录中创建名为 sites-available 的文件夹,例如: C:\nginx\sites-available。
  2. 在该目录下创建两个 .conf 文件分别代表每个站点的 Nginx 配置文件,例如:site1.conf 和 site2.conf。
  3. 编辑 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;
    }
}
  1. 编辑 site2.conf文件,添加内容同上只是域名、前端静态页面位子、证书位子、后端端口不同,改成自己存放的位子即可。
  2. 在 nginx 安装目录中创建名为 sites-enabled 的文件夹,例如:C:\nginx\sites-enabled。
  3. 将 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配置文件就是如此。

  1. 创建一个 nginx.conf 文件并将其放置在 Nginx 安装目录中, 例如:C:\nginx\nginx.conf。也就是默认配置文件。
  2. 在 nginx.conf 中的 http 段落中,添加以下内容:
http {
    include       mime.types;
    default_type  application/octet-stream;

    # 以下是两个站点的配置文件引用
    include       sites-enabled/site1.conf;
    include       sites-enabled/site2.conf;
}
  1. 保存并重启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;
    }