nginx

本文详细介绍了Nginx的安装步骤,包括下载、解压、配置和编译安装。还阐述了Nginx的配置选项,如location的匹配规则、root和alias的使用、反向代理proxy_pass、rewrite的URL重写等。此外,涉及负载均衡、运行阶段、跨域处理等内容,为Nginx的使用提供了全面指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装:

wget http://nginx.org/download/nginx-1.9.0.tar.gz

tar -zxvf nginx-1.9.0.tar.gz

cd nginx-1.9.0

./configure   --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make && make install

#配置

#--prefix指定安装目录

#--with-http_ssl_module安装https模块

#creating objs/Makefile 代表编译成功

make && make install 

#make编译

#make install安装

可能需要:

yum -y install pcre pcre-devel

yum -y install zlib zlib-devel

yum install -y openssl openssl-devel

 

命令(nginx/   Nginx的安装根目录)

whereis nginx

nginx/sbin/nginx启动

nginx/sbin/nginx -s stop  停止

nginx/sbin/nginx -s quit退出

nginx/sbin/nginx -s reload 重新加载nginx.conf

nginx/sbin/nginx -t  检测Nginx配置文件是否正确

 

location:

1、~ 正则匹配 区分大小写

2、~* 正则匹配 不区分大小写

3、^~ 不用正则

4、= 严格匹配 完全相等

5、无前缀 

location分类

1、普通location:

    无前缀

    =

    ^~

2、正则location:

    ~

    ~*

location规则

c78c02508db122cfd7972bceb067fd9674f.jpg

注:

正则匹配以第一个匹配到的为准

普通匹配以最长匹配为准(/a/b  /a/b/c  则以/a/b/c为准)

 

语法规则:

location [=|~|~*|^~] /uri/ {… }

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

符号

含义

=

= 开头表示精确匹配

^~

^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)

~

~ 开头表示区分大小写的正则匹配

~*

~* 开头表示不区分大小写的正则匹配

!~和!~*

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则

/

用户所使用的代理(一般为浏览器)

$http_x_forwarded_for

可以记录客户端IP,通过代理服务器来记录客户端的ip地址

$http_referer

可以记录用户是从哪个链接访问过来的

 

root 的处理结果:

root路径+location路径

alias的处理结果:

目录别名,使用alias路径替换location路径   

(如

server_name a.jzq.com;

location /aaa{

    alias  html/;

}

访问的url:http://a.jzq.com/aaa/a.html

转换后:http://a.jzq.com/html/a.html

alias后面必须要用“/”,否则找不到文件  而root可有可无

alias、root

相当于声明 rootPath = "/usr/local/html"

e20a9511958439935ed229f1ddca8ea68a0.jpg

反向代理 proxy_pass :

server{

    listen  80;

    server_name a.jzq.com;

    location /aaa{

        proxy_pass  http://192.168.2.127:8888/;#有斜杠 直接替换url中包括/aaa在内的之前的内容

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

访问的url:http://a.jzq.com/aaa/a.html

转换后:http://192.168.2.127:8888/a.html

(待验证: 推荐以/结尾,就没有这么多淡疼的事了

location /aaa{

        proxy_pass  http://192.168.2.127:8888;#没有斜杠 替换url中/aaa之前的内容 即/aaa 也会被追加到代理url后边

 }

访问的url:http://a.jzq.com/aaa/a.html

转换后:http://192.168.2.127:8888/aaa/a.html)

proxy_pass的关闭与否 仅针对ip+port后有没有“/”

如果

  location /aaa{

        proxy_pass  http://192.168.2.127:8888/stm; #ip+port后有“/”    替换url中包括/aaa在内的之前的内容

    }

访问的url:http://a.jzq.com/aaa/a.html

转换后:http://192.168.2.127:8888/stm/a.html

32a349b4c2dfc6fb420b124aa5dd2c283b2.jpg

rewrite

实现url的重写以及重定向

server{

    listen  80;

    server_name  a.jzq.com;

    location /a{

        rewrite  ^/   /a.html break; 

        #(1)服务器重定向  即浏览器地址栏中的地址不发生变化,依旧是a.jzq.com/a只是呈现给用户的是a.jzq.com/a.html页面的内容   

        #(2)^/ 代表全部匹配(正则) /a/**都会重写为/a.html

        #(3)break 停止以后命令的执行  好比for循环中的continue ; 在出现多个rewrite时 rewrite  ^/   /a.html break;  rewrite  ^/   /b.html break;  rewrite  ^/   /c.html break;  在执行到第一个break出现时,以后的所有rewrite 将不会再执行

        #(4)last 在出现多个rewrite时 rewrite  ^/   /a.html last ;  rewrite  ^/   /b.html break;  rewrite  ^/   /c.html break;  在执行完第一个last 后,会正常执行后边的rewrite

        #rewrite  ^/    /a.html redirect;  #客户端302重定向  即浏览器地址栏中的地址在敲入a.jzq.com/a后,立即变成a.jzq.com/a.html

        #rewrite  ^/    /a.html permanent;  #客户端301重定向  即浏览器地址栏中的地址在敲入a.jzq.com/a后,立即变成a.jzq.com/a.html

        root   html/static/;  #会被重写/重定向后的root替换掉

    }

}

a84e7dbefeedf204d39f94bd93ec16c49d2.jpg

c10d2aadfd4dbf15b0d9d961ea42a18108a.jpg

0452179f29062ee3ebc689ace980caffff7.jpg

index:

2fddca76157b889161e85e26b0a34728f11.jpg

如:访问http://192.168.2.127:8888/aaa/ 则在192.168.2.127:8888/aaa/目录下查找index页面

如果访问http://192.168.2.127:8888/aaa  index不生效

f9349ebb08b394d3984e2dbda5c7d96883f.jpg

负载均衡 upstream:

upstream nginxus{

    #ip_hash

    server 172.17.0.5:8888 weight=2;

    server 172.17.0.6:8888 weight=1;

}

server{

    listen  80;

    server_name  a.jzq.com;

    location /aaa{

        proxy_pass  http://nginxus/;

    }

}

b91f39bfc4533f4cc2069ca2b572293a111.jpg

nginx运行阶段:  

rewrite 阶段、---rewrite指令  (好比java中的controller)

access 阶段、----(好比java中的service)

content 阶段  -----(好比java中的jsp   返回文本给浏览器)

不按代码顺序执行,是按阶段执行,顺序如下:

先执行命中的所有rewrite层指令(下面的set),再执行access,再执行content(下面的echo)

location  = / {

        set $a 32;

        echo $a;

        set $a 64;

        echo $a;

两次echo都会输出 64 

因为:set指令是rewrite级别

echo指令属于content级别

 

07e2370705cdb0beb0daf41578645227b85.jpg

跨域

588d8ae2f54618a31b8212e7dfc794bc7b1.jpg

        if ( $http_origin ~ http://(.*).enjoy.com){#只需要把http://(.*).enjoy.com修改成自己的url地址就行
                 set $allow_url $http_origin;
        }
       #是否允许请求带有验证信息
         add_header Access-Control-Allow-Credentials true;
         #允许跨域访问的域名,可以是一个域的列表,也可以是通配符*
         add_header Access-Control-Allow-Origin  $allow_url;
         #允许脚本访问的返回头
         add_header Access-Control-Allow-Headers 'x-requested-with,content-type,Cache-Control,Pragma,Date,x-timestamp';
         #允许使用的请求方法,以逗号隔开
         add_header Access-Control-Allow-Methods 'POST,GET,OPTIONS,PUT,DELETE';
         #允许自定义的头部,以逗号隔开,大小写不敏感
         add_header Access-Control-Expose-Headers 'WWW-Authenticate,Server-Authorization';
         #P3P支持跨域cookie操作
         add_header P3P 'policyref="/w3c/p3p.xml", CP="NOI DSP PSAa OUR BUS IND ONL UNI COM NAV INT LOC"';
    add_header test  1;

     if ($request_method = 'OPTIONS') {
             return 204;
         }

转载于:https://my.oschina.net/u/2351011/blog/3053915

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值