Nginx 基础

一、安装Nginx

该压缩包,位Nginx免安装版,解压即可用

二、Nginx基本操作

进入Nginx安装目录,我的是装在d盘。

 

start nginx                打开nginx

nginx  t                    编译conf文件夹下的nginx.conf文件(以后我们大部分的操作都是                                                对这个文件进行编写),用于检测nginx.conf是否存在语法上的错误。                                            但是注意此命令不会对nginx.conf重新进行加载

nginx -s reload         每次修改了nginx.conf文件后都要执行此命令重新加载。

nginx -s stop             强制关闭nginx。即不会等待nginx正在执行的任务。

nginx -s quit              关闭nginx。会等待nginx下未完成的任务完成后关闭。

三、配置文件结构

1.http模块

包含upstream和server等模块。

 

upstream:用以配置负载均衡

 

server:用以配置一个服务。

2.upstream模块

eg.

         upstreamtest.com{

                  server www.bbb.com:81  weight = 1;

                  server www.aaa.com:82  weight =2;

         }

通过访问test.com这个域名,我们可以访问到其下所有server,每次由系统来决定由那个服务端来接受请求。weight用来分配这些服务端被访问的权重,权重越高的被访问的几率越大,如例中所示,aaa被访问的概率是bbb被访问概率的2倍。在配置的时候主要是根据服务器的性能来进行配置,性能好的,自然权重越大,被访问的几率越大。

3.server模块

listen

1.监听的端口,如80,81等端口。80端口是nginx的默认端口,所以在通过域名访问的时候是不需要在浏览器中标注出来的,其他端口在访问的时候是需要进行标注的,如http://www.aaa.com:81。

2.也可以是完整的一个IP加上端口。这样的话在访问的时候我们就不一定需要通过server_name进行访问,而可以通过它的IP端口进行访问。

server_name

1.命名规则随意。也可以是正则表达式eg,*.aaa.com,这样在匹配server_name的时候就会匹配后续部分相同的,如org.aaa.com;www.aaa.com等。

2.需要注意的是,对于任何一个域名,要想通过它去访问ip的化需要,在hosts文件中添加映射,以方便进行域名解析,否则就会访问不到页面。

 

location

         匹配到host header后进行具体的uri定位,详见location模块。

4.location模块

命名规则

(形如location [ = | ~ | ~* | ^~ ] uri { ...})

         命名上分为普通表达式如:=,^~,和空("[]",表示可以没有)。和正则表达式如:~,~*。具体区别如下:

"=":表示精确匹配,如location=/lo{}则表示只能匹配到域名/lo,不能有后续部分。

空:仅前缀匹配,如location /lo{}则表示只要前缀名相同,不管后续部分。

^~:和空一样,但是只要有普通表达式匹配上了,就不会再去匹配正则表达式。

~:区分大小写的正则表达式。

~*:不区分大小写的正则表达式。

 

ps:location的匹配是按照最长前缀的规则来匹配的,且是先匹配普通表达式,再匹配正则表达式。也就是说前缀匹配程度越高,则越会被匹配到,但是若是匹配到正则表达式则普通表达式就会被覆盖,访问正则表达式location。(建议使用的时候尽量不要搞那么复杂把自己绕晕了。)关于,nginx如何处理请求后面会有详解。

 

proxy_pass(反向代理)

eg. proxy_pass URL;       

location被请求后会跳转到proxy_pass所指定的url。需要注意的是,对于在普通表达式形成的location中,proxy_pass没有限制,即可以定位到整个url。但是对于正则表达式形成的location,proxy_pass只能定位到host header。对于剩下的uri部分要另行处理,详见如下Rewrite 模块。

 

Rewrite重定向

         eg.rewrite regex replacement [flag];

 

当location是正则表达式时,且内部使用了反向代理,这时对于除host header之外的uri部分,我们需要用rewrite对uri进行重写。注意rewrite只对除去host header和参数部分的url进行重写,且是全部重写。样例如上,相当于在主机地址后面添加了url。

其中regex任意,不为空即可。任意不代表它没有作用,当我们需要从regex中读取或保留参数的时候,则需要一定的命名规则。如我们需要对/ad*request.adx这样一个请求定向到/ad/request这样的url里来,可以这样写:

rewrite "^([a-z]{2})*([a-z]{7}).adx$"/$1/$2 break;

需要注意的是regex为了里面内容符号上的冲突最好用""括起来。

()表示里面的是参数,可以用是$+数字引用,数字表示位置。

[a-z]:表示小写的24个字母。

[A-Z]:表示大写的24个字母。

{num}:num为数字,表示从a-z中取出多少个字母。

 

关于flag标记:

last                    表示完成rewrite

break               终止匹配, 不再匹配后面的规则

redirect           返回302临时重定向,地址栏会显示跳转后的地址

permanent     返回301永久重定向,地址栏会显示跳转后的地址

 

注意:因为ADX请求响应要求是200表示成功,所以我们不用301、302重定向参数。

 

 

四、Nginx如何处理请求

         Nginx在被请求访问server的时候,首先查看被监听的端口,如果监听端口包含了ip地址则我们直接可以通过ip进行访问,如果匹配到了端口但是却找不到对应的server_name,则会匹配到默认的server上,在listen 端口的后面添加defalt_server这个参数可以设置位默认server。

         之后会匹配server里面的location,根据最长前缀原则进行匹配,具体可参考前面location模块里的命名规则。

五、Nginx配置https环境。

1.配置参数。

配置参数如下即可。

         注意:https默认的访问端口是443,不是80端口,key文件根据需要可以选择带密码的和不带密码的。

 

2.生成证书

1.安装openssl(证书生成工具)

解压AMD64-Win64OpenSSL-0_9_8g即可,无需安装。

2.双击openssl.exe打开程序。

操作步骤如下:

 

# 1).生成一个RSA密钥

genrsa -des3 -out hkli.key 1024

 

# 2).拷贝一个不需要输入密码的密钥文件

rsa -in hkli.key -out hkli_nopass.key

 

# 3).生成一个证书请求

req -new -key hkli.key -config"d:\openssl.cnf" -out hkli.csr

 

# 4).自己签发证书

x509 -req -days 365 -in hkli.csr -signkey hkli.key-out hkli.crt

 

注意:a.第三步,config后面的内容填的是openssl.cnf这个文件的具体内容。

         b.执行第三步时会让填写资料,其他随便,但是uinit name,common name,email address必须要根据自己的域名来写。

 

具体操作如下图。

 

 

 

 

六、正则表达式

对于不了解正则表达式的童鞋,可以看这里,这里做了总结。

1.location部分

         "/"    :        通用匹配。

"="   :    表示精确匹配,如location=/lo{}则表示只能匹配到域名/lo,不能有后续部分。

空    :    仅前缀匹配,如location /lo{}则表示只要前缀名相同,不管后续部分。

^~    :    和空一样,但是只要有普通表达式匹配上了,就不会再去匹配正则表达式。

~       :    区分大小写的正则表达式。

~*    :    不区分大小写的正则表达式。

 

2.Rewrite部分

.       :   匹配除换行符以外的任意字符

?      :   重复0次或1次

+     :   重复1次或更多次

*     :   重复0次或更多次

\d    :    匹配数字

^     :   匹配字符串的开始

$     :   匹配字符串的介绍

{n}   :   重复n次

{n,} :   重复n次或更多次

[c]   :   匹配单个字符c

[a-z] :   匹配a-z小写字母的任意一个

[A-Z] :   匹配A-Z大写字母的任意一个

 

小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。

参考文档

Nginx官方文档: http://nginx.org/en/docs/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值