1.20-1.22

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 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章