服务器多网站部署

0. 写在前面

服务器如果直部署一个网站,资源有点浪费,可以利用nginx的反向代理来部署多个网站。

我们知道,80端口只有一个,在浏览器输入域名,默认访问的是80端口。如果我们分配其他端口给该域名,那么域名后面要加上端口号才能正访问,这就非常不方便了,而且难看。

1. 什么是反向代理?

简单来说,就是转发请求

2018.02.02 更正

反向代理,即客户端进行访问时因为经过了nginx的请求转发,对客户端而言并不知道“真实”访问的地址;正向代理就是客户端使用了一个代理地址,帮助客户端发出请求,而服务端会以为请求来自代理节点。

将该域名80端口的请求转发到另外一个端口上,就能实现多个域名”占用了一个端口”,直接输入域名即可,不再需要端口号。

实际上也并不一定这么做,只需在server_name添加域名即可,因为nginx处理请求时,先处理请求头,再交由handler、filter处理,最后才对,只要确保location作用域能正确处理不同请求即可。

2. nginx配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 80;
server_name domain_name;
location / {
proxy_pass http://localhost:8996;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 转发到此端口
server {
listen 8996;
root /var/www/activity;
index index.php index.html;
# Make site accessible from http://localhost/
server_name localhost;
// other conf
}

附语法

语法规则:
location [=|~|~*|^~] /uri/ { … }

  • = 开头表示精确匹配
  • ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
  • ~ 开头表示区分大小写的正则匹配
  • ~* 开头表示不区分大小写的正则匹配
  • !~ !~* 分别为区分大小写不匹配及不区分大小写不匹配的正则
  • / 通用匹配,任何请求都会匹配到。

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 ->这是默认情况

当有last关键字时,会按照rewirte后的url重新发起一次http请求,再次匹配location;而break会停止匹配下一个location,handler不会停止执行。