安装:
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规则

注:
正则匹配以第一个匹配到的为准
普通匹配以最长匹配为准(/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"

反向代理 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

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替换掉
}
}



index:

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

负载均衡 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/;
}
}

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级别

跨域

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

2万+

被折叠的 条评论
为什么被折叠?



