0. 写在前面
服务器如果直部署一个网站,资源有点浪费,可以利用nginx的反向代理来部署多个网站。
我们知道,80端口只有一个,在浏览器输入域名,默认访问的是80端口。如果我们分配其他端口给该域名,那么域名后面要加上端口号才能正访问,这就非常不方便了,而且难看。
1. 什么是反向代理?
简单来说,就是转发请求。
2018.02.02 更正
反向代理,即客户端进行访问时因为经过了nginx的请求转发,对客户端而言并不知道“真实”访问的地址;正向代理就是客户端使用了一个代理地址,帮助客户端发出请求,而服务端会以为请求来自代理节点。
将该域名80端口的请求转发到另外一个端口上,就能实现多个域名”占用了一个端口”,直接输入域名即可,不再需要端口号。
实际上也并不一定这么做,只需在server_name添加域名即可,因为nginx处理请求时,先处理请求头,再交由handler、filter处理,最后才对,只要确保location作用域能正确处理不同请求即可。
2. nginx配置示例
|
|
附语法
语法规则:
location [=|~|~*|^~] /uri/ { … }
- = 开头表示精确匹配
- ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
- ~ 开头表示区分大小写的正则匹配
- ~* 开头表示不区分大小写的正则匹配
- !~ !~* 分别为区分大小写不匹配及不区分大小写不匹配的正则
- / 通用匹配,任何请求都会匹配到。
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 ->这是默认情况
当有last关键字时,会按照rewirte后的url重新发起一次http请求,再次匹配location;而break会停止匹配下一个location,handler不会停止执行。