0%

使用Nginx实现多个网站代理[多端口监听][django][资源服务器]

原文链接:使用Nginx实现多个网站代理

使用Nginx实现多个网站代理

导言

nginx是网站开发后期一个不可缺少的应用。nginx的作用是:

  1. 请求代理:监听请求并转发给对应端口的进程处理
  2. 资源代理:使用nginx直接将服务器资源共享
  3. 负载均衡:通过配置nginx的代理,将请求发送到不同进程或服务器处理,提升服务的响应速度

要想使用nginx多个域名的请求代理,首先nginx需要能接收到来自不同域名的请求。
例如example.com下的三级域名www,res,blog,email等服务。要将这些域名通过DNS解析到我们的服务器IP。
可以参考 如何DNS解析域名和开放服务器端口

目前假设我们已经有两个三级域名www.example.com和blog.example.com

nginx安装

本节是进行nginx的安装配置,已安装会配置的可以直接跳过

nginx的详细安装方式

nginx配置

安装后,我们进入nginx目录,可以看到nginx.conf

里面可以配置log地址和事件等设置,其中大部分我们都不需要配置。

nginx导入自定义配置目录

我们在nginx配置目录下新建一个配置我们多个网站服务的目录。在宝塔面板中为vhost/nginx。
为了让nginx加载这个目录,在nginx的http控制块末尾加上:

1
include /www/server/panel/vhost/nginx/*.conf;

路径是根据自己自定义的目录配置。

单个网站配置

新建一个www.example.com.conf 在配置目录下。
添加一个服务块的基础配置

1
2
3
4
5
6
7
8
9
10
server
{
listen 80;
server_name www.example.com;
index index.html
root /www/wwwroot/www.example.com;

access_log /www/wwwlogs/www.example.com.log;
error_log /www/wwwlogs/www.example.com.log;
}

这是一个基础的配置,表示监听80端口,处理的域名是www.example.com,
root就是网站的目录,index要在网站根目录下,这样访问的时候会自动加载出index.html

访问时如果没有index文件或者访问不存在的路径时,会显示502,这其实表示nginx已经代理了请求,只是我们的处理服务没有响应。

因此我们要把这个网站的处理服务添加上去。处理服务实际上就是一个进程,我们把请求转发给对应进程的端口就行,例如新的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
server
{
listen 80;
server_name www.example.com;
index index.html
root /www/wwwroot/www.example.com;

location / {
proxy_pass http://127.0.0.1:8002;
}
access_log /www/wwwlogs/www.example.com.log;
error_log /www/wwwlogs/www.example.com.log;
}

我们将请求发给了本地主机的8002端口的进程,这个进程可以是java,python的开发框架实现的一个网络服务。
我们重新启动nginx

1
service nginx restart

就可以访问服务了。

多个网站配置

在实际应用场景中一个服务器上配置多个服务是很常见的。
我们现在在同一个IP的服务器上配置第二个网站blog.example.com

实际操作就是让这个网站的服务在8001端口工作,然后创建一个blog.example.com.conf配置文件
修改名称和代理路由就行,当然配置的log文件也需要修改

1
2
3
4
5
6
7
8
9
10
11
12
13
server
{
listen 80;
server_name blog.example.com;
index index.html
root /www/wwwroot/blog.example.com;

location / {
proxy_pass http://127.0.0.1:8001;
}
access_log /www/wwwlogs/blog.example.com.log;
error_log /www/wwwlogs/blog.example.com.log;
}

重新启动nginx就能同时访问了。