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 




猜你喜欢

转载自blog.51cto.com/13578154/2309544