1.19 nginx的location配置
安裝第三方模塊echo-nginx-module
git clone https://github.com/openresty/echo-nginx-module.git
./configure --prefix=/usr/local/nginx --add-module=/path/to/echo-nginx-module
安裝echo模塊操作:
cd /usr/local/src/nginx-1.8.0/
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/echo-nginx-module
make && make install
/etc/init.d/nginx restart
# nginx -V
nginx version: nginx/1.8.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
configure arguments: --prefix=/usr/local/nginx --add-module=/usr/local/src/echo-nginx-module
配置寫法:
server {
listen 80;
server_name 2.com;
root /data/t-nginx/2.com;
location /abc/
{
echo 123;
}
}
效果 訪問/abc/要輸出echo的信息
curl -x127.0.0.1:80 2.com/abc/1111
123
location語法
location [=|^~|~|~*] /uri/ { …. }
https://coding.net/u/aminglinux/p/nginx/git/blob/master/location/ruler.md
location優先級及案例
= 高於 ^~ 高於 ~* 等於 ~ 高於 /
http://coding.net/u/aminglinux/p/nginx/git/blob/master/location/priority.md
場景比較:/與~*
server {
listen 80;
server_name 2.com;
root /data/t-nginx/2.com;
location /abc/
{
echo "/";
}
location ~* abc
{
echo "~*";
}
}
效果:
當匹配到 location /abc/的時候,輸出/
當匹配到 location ~* abc的時候,輸出~*
測試訪問:
curl -x127.0.0.1:80 2.com/abc/1111
~*
實驗證明,同樣的場景~*比/的優先級要高。
場景比較:~與~*
當這2個同時存在,會匹配最先出現的location語法。
場景比較:= 與 ^~
vim 2.com.conf
server {
listen 80;
server_name 2.com;
root /data/t-nginx/2.com;
location ^~ abc
{
echo "^~";
}
location = "/abc/1.php"
{
echo "=";
}
}
# curl -x127.0.0.1:80 2.com/abc/1.php
=
實驗證明,同樣的場景,=比^~的優先級要高。
規則示例
location = "/12.jpg" { ... }
如:
www.aminglinux.com/12.jpg 匹配
www.aminglinux.com/abc/12.jpg 不匹配
不匹配原因:因爲“=”是精準匹配
location ^~ "/abc/" { ... }
如:
www.aminglinux.com/abc/123.html 匹配
www.aminglinux.com/a/abc/123.jpg 不匹配
不匹配原因:因爲是以"/abc/"開頭並匹配
location ~ "png" { ... }
如:
www.aminglinux.com/aaa/bbb/ccc/123.png 匹配
www.aminglinux.com/aaa/png/123.html 匹配
都匹配:~匹配"png"即可
location ~* "png" { ... }
如:
www.aminglinux.com/aaa/bbb/ccc/123.PNG 匹配
www.aminglinux.com/aaa/png/123.html 匹配
都匹配:因爲不區分大小寫匹配,所以有"png"都會匹配
location /admin/ { ... }
如:
www.aminglinux.com/admin/aaa/1.php 匹配
www.aminglinux.com/123/admin/1.php 不匹配
不匹配原因:因爲是匹配uri後/admin/的開頭,so第二個不配。
1.20 nginx正向代理
示意圖
https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/pic.md
Nginx正向代理
https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/z_proxy.md
正向代理:
用戶和代理服務器在同一個內網環境裏,代理服務器幫用戶去訪問用戶訪問不到的web server
Nginx正向代理配置文件
server {
listen 80 default_server;
resolver 119.29.29.29;
location /
{
proxy_pass http://$host$request_uri;
}
}
解釋:
正向代理配置文件一定要設default_server;
resolver 119.29.29.29; 解釋dns,這個dns能解析所有公網web,除了被大陸防火牆屏蔽掉的(Facebook,Instagram...)
訪問測試:
curl 外網
curl -x127.0.0.1:80 外網
Nginx反向代理
https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/f_proxy.md
配置反向代理:
條件:
1 需要代理的server_name
2 server_name的IP或者ip:port
80代理90的域名配置如下:
server
{
listen 80;
server_name www.test.com;
location /
{
proxy_pass http://127.0.0.1:90/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
90被代理的虛擬主機配置:
server
{
listen 90 default_server;
server_name www.test.com;
root /data/t-nginx/test.com/;
index index.html ;
}
mkdir -p /data/t-nginx/test.com
echo "test.com_90" > /data/t-nginx/test.com/index.html
訪問測試:
# curl -x127.0.0.1:90 www.test.com
test.com_90
# curl 127.0.0.1:90
test.com_90
訪問ip:port和從90端口訪問都是一樣。
場景:訪問test.com下,一個是default_server,另一個不是,區別輸出結果
[root@AliKvn vhost]# cat test.com.conf
server
{
listen 90 ;
server_name www.test.com;
root /data/t-nginx/test.com/;
index index.html ;
}
[root@AliKvn vhost]#test.com-90-default.conf
server
{
listen 90 default_server;
# server_name www.test.com;
root /data/t-nginx/test.com/;
index index.html ;
location /
{
echo "90 default";
}
}
訪問測試:
#curl 127.0.0.1:90
90 default
# curl -x127.0.0.1:90 www.test.com
test.com_90
# curl -x127.0.0.1:80 www.test.com
test.com_90
當利用80端口去訪問 www.test.com的時候,跟利用90端口去訪問www.test.com是一樣的,證明反向代理已經配置成功了。
當proxy_pass 後面接的是域名的話,域名需要在本機hosts解析。
proxy_set_header 的Host $host 是對應的,區分爲前端和後端地址。
nginx反向代理——proxy_pass
管什麼情況下,最好都加上/
緩衝和緩存 https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/bu_ca.md
Nginx負載均衡
https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/lb.md