原文链接:使用Nginx实现多个网站代理
使用Nginx实现多个网站代理
导言
nginx是网站开发后期一个不可缺少的应用。nginx的作用是:
- 请求代理:监听请求并转发给对应端口的进程处理
- 资源代理:使用nginx直接将服务器资源共享
- 负载均衡:通过配置nginx的代理,将请求发送到不同进程或服务器处理,提升服务的响应速度
要想使用nginx多个域名的请求代理,首先nginx需要能接收到来自不同域名的请求。
例如example.com下的三级域名www,res,blog,email等服务。要将这些域名通过DNS解析到我们的服务器IP。
可以参考 如何DNS解析域名和开放服务器端口
目前假设我们已经有两个三级域名www.example.com和blog.example.com
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 | server |
这是一个基础的配置,表示监听80端口,处理的域名是www.example.com,
root就是网站的目录,index要在网站根目录下,这样访问的时候会自动加载出index.html
访问时如果没有index文件或者访问不存在的路径时,会显示502,这其实表示nginx已经代理了请求,只是我们的处理服务没有响应。
因此我们要把这个网站的处理服务添加上去。处理服务实际上就是一个进程,我们把请求转发给对应进程的端口就行,例如新的配置:
1 | server |
我们将请求发给了本地主机的8002端口的进程,这个进程可以是java,python的开发框架实现的一个网络服务。
我们重新启动nginx
1 | service nginx restart |
就可以访问服务了。
多个网站配置
在实际应用场景中一个服务器上配置多个服务是很常见的。
我们现在在同一个IP的服务器上配置第二个网站blog.example.com
实际操作就是让这个网站的服务在8001端口工作,然后创建一个blog.example.com.conf配置文件
修改名称和代理路由就行,当然配置的log文件也需要修改
1 | server |
重新启动nginx就能同时访问了。