http模块
stream模块
从1.9.0开始,增加stream模块,用来实现四层协议的转发、代理或者负载均衡等
stream模块的用法和http模块差不多,语法基本一致,支持server,hash, listen, proxy_pass等指令。
Oracle反向代理
#如果要代理oracle或者mysql这种需要用stream
stream {
upstream oracle {
hash $remote_addr consistent;
server 192.168.99.3:1521 weight=50 max_fails=3 fail_timeout=30s;
}
server {
listen 3000 so_keepalive=on;#公网机器监听端口
proxy_connect_timeout 1s;
#注意这个,简单的来说就是连接上以后session的保持时间,就是多长时间不活动下次要重新链接,建议设大一点
proxy_timeout 36000s;
proxy_pass oracle;
proxy_download_rate 2048000;
proxy_upload_rate 2048000;
}
}
sql server反向代理
#如果要代理oracle或者mysql这种需要用stream
stream {
upstream sqlserver {
server 192.168.90.5:1433 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 1433;
proxy_connect_timeout 1s;
proxy_timeout 300s;
proxy_pass sqlserver;
}
}
redis反向代理
#如果要代理oracle或者mysql这种需要用stream
stream {
upstream redis {
server 192.168.99.3:6379 max_fails=3 fail_timeout=30s;
}
server {
listen 6379;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass redis;
}
}
ssh反向代理
stream {
upstream ssh {
server 192.168.150.95:22;
}
server {
listen 33;
proxy_connect_timeout 3s;
proxy_timeout 5s;
proxy_pass ssh;
}
}
ssh客户端连接:
ssh -p 33 root@ip
1. location下的匹配命令
1.1 可用的匹配命令及作用
location 中可用的匹配命令有两种:普通字符串和正则表达式。~ 和~* 用于正则表达式,其他前缀和无任何前缀都用于普通字符串。正则表达式会根据匹配顺序,匹配到第一个正则表达式后停止搜索。普通字符串匹配则无视顺序,只会选择最精确的匹配。常用的匹配命令和作用如下:
命令 | 作用 |
---|---|
~ | 表示执行一个正则匹配,区分大小写 |
~* | 表示执行一个正则匹配,不区分大小写 |
^~ | 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配其他。一般用来匹配目录 |
= | 进行普通字符精确匹配 |
无前缀 | 用于普通字符串 |
@ | 定义一个命名的location,使用在内部定向时,例如error_page,try_files |
1.2 匹配命令优先级
1.3 示例
- 只匹配“/”。
location = / {
}
- 匹配任何请求,所有URI都是以“/”开始;更长字符匹配或正则表达式匹配会优先。
匹配任何以/Directory/ 开始的请求,并停止匹配其他location。
location ^~ /Directory/ {
}
匹配以gif、jpg、jpeg结尾的请求;但是遇到^~由它处理 。
location ~* .(gif|jpg|jpeg)$ {
}
以/index/开头的请求,如果链接的状态为404。则会匹配到@index_error。
location /index/ {
error_page 404 @index_error;
}
location @index_error {
… }
2. 常用配置指令:alias、root、proxy_pass
2.1 alias
alias为别名配置,用于访问文件系统,在匹配到URL后,将URL中 匹配到的字段替换成alias 后边的内容。
示例一:
若 location 配置如下(普通字符串匹配),则请求URL为“/test/file”时,返回文件“/usr/local/file”。
location /test/ {
alias /usr/local/;
}
示例二:
若 location 配置如下(正则表达式匹配),则请求URL为“/test/love.gif”时,返回文件“/usr/local/test1/love.gif”。
其中 “$1” 表示 location表达式中匹配的第一个参数。
location ~* /test/~* .(gif|jpg|jpeg)${
alias /usr/local/test1/$1;
}
2.2 root
根路径配置,用于访问文件系统,在匹配到URI后,指向root配置的路径,并把请求路径附加到其后。
示例一:
若 location 配置如下(普通字符串匹配),则请求URL为“/test/file”时,返回文件“/usr/local/test/file”
location /test/ {
root /usr/local/;
}
2.3 proxy_pass
代理配置,用于代理请求,匹配到URI后,转发请求到proxy_pass配置的URL。
示例一:
若 location 配置如下(普通字符串匹配),则请求URL为“/test/hello”时,返回则将请求转发到“http://192.168.1.111:8089/hello”。
location /test/ {
proxy_pass http://192.168.1.111:8089/;
}
注:如果proxy_pass配置了“/”则不附加location的URI,没有配置“/”,则会附加。