一、nginx源码安装:
1、管网下载并解压:
tar -xf nginx-1.15.4.tar.gz
2、安装依赖包:
yum -y install pcre-devel openssl-devel
3、创建nginx用户
useradd -s /sbin/nologin nginx
4、编译安装:
cd nginx-1.15.4/
./configure --user=nginx --group=nginx --without-http_ssi_module --without-http_autoindex_module --with-http_ssl_module --with-http_stub_status_module #默认安装到/usr/local/nginx ,加选项 --prefix=安装路径 可以手动指定安装路径。
make && make install
ln -s /usr/local/nginx/sbin/nginx /sbin/
二、调优:
1、nginx作反向代理超时时间配置:
proxy_connect_timeout
语法 proxy_connect_timeout time
默认值 60s
上下文 http server location
说明 该指令设置与upstream server的连接超时时间,有必要记住,这个超时不能超过75秒。
这个不是等待后端返回页面的时间,那是由proxy_read_timeout声明的。如果你的upstream服务器起来了,但是hanging住了(例如,没有足够的线程处理请求,所以把你的请求放到请求池里稍后处理),那么这个声明是没有用的,由于与upstream服务器的连接已经建立了。
---------------------
proxy_read_timeout
语法 proxy_read_timeout time
默认值 60s
上下文 http server location
说明 该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应。这个时间不是获得整个response的时间,而是两次reading操作的时间。如果后端有大文件传输的需求时,需要将此值调大一些。
---------------------
proxy_send_timeout
语法 proxy_send_timeout time
默认值 60s
上下文 http server location
说明 这个指定设置了发送请求给upstream服务器的超时时间。超时设置不是为了整个发送期间,而是在两次write操作期间。如果超时后,upstream没有收到新的数据,nginx会关闭连接
---------------------
三、location匹配:
1、location的两大类:
nginx的location匹配分为普通匹配和正则匹配。那么其中“~ ”和“~* ”前缀表示正则location ,“~ ”区分大小写,“~* ”不区分大小写;其他前缀(包括:“=”,“^~ ”和“@ ”)和无任何前缀的都属于普通location 。
2、多个 location 配置的情况下匹配顺序为
(1)首先精确匹配 = ,若存在相同功能的正则匹配,则忽略。
(2)其次普通匹配 ^~ ,若存在相同功能的正则匹配,则忽略。
(3)其次是按文件中顺序的正则匹配 ,对于正则匹配,遵循匹配及停止的规则。注意:除了此条为正则location,其余都是普通location。
(4)然后匹配不带任何修饰的普通匹配。
(5)最后是交给 / 通用匹配,“/”的优先级最低,其他匹配不到的都会匹配到这里。
注意:
(1)若HTTP请求同时满足(3)和(4),即同时满足不带修饰的普通location和正则location时,正则location会覆盖普通location。
(2)对于普通location的匹配,与location的上下文位置无关,而是遵循最大前缀匹配。对于正则location的匹配,与location的上下文位置有关,遵循匹配及停止。
3、@的使用案例说明:
server {
.......
#error_page 404 http://www.baidu.com # 直接这样是不允许的
error_page 404 = @fallback;
location @fallback {
proxy_pass http://www.baidu.com;
}
......
}
上述配置文件的意思是:如果请求的 URI 存在,则本 nginx 返回对应的页面;如果不存在,则把请求代理到baidu.com 上去做个弥补(注: nginx 当发现 URI 对应的页面不存在, HTTP_StatusCode 会是 404 ,此时error_page 404 指令能捕获它)。
经过测试发现:若访问的页面nginx本身没有,baidu也找不到,会报302(临时重定向)错误。故思考,这种方式可能属于重定向的一种,但仅仅是我个人的想法,有待斟酌。
4、正则location:
(1)^: 匹配字符串的开始位置
(2)$:匹配字符串的结束位置
(3).*: .匹配任意字符,*匹配数量0到正无穷
(4)\. 斜杠用来转义,\.匹配 .
(5)(值1|值2|值3|值4):或匹配模式,例:(jpg|gif|png|bmp)匹配jpg或gif或png或bmp
.
: 匹配除换行符以外的任意字符?
: 重复0次或1次+
: 重复1次或更多次*
: 重复0次或更多次\d
:匹配数字^
: 匹配字符串的开始$
: 匹配字符串的介绍{n}
: 重复n次{n,}
: 重复n次或更多次[c]
: 匹配单个字符c[a-z]
: 匹配a-z小写字母的任意一个- 小括号
()
之间匹配的内容,可以在后面通过$1
来引用,$2
表示的是前面第二个()
里的内容。正则里面容易让人困惑的是\
转义特殊字符。
5、rewrite
https://www.cnblogs.com/IPYQ/p/7889399.html