基础
- 流程 :
-
分为正向代理和反向代理
-
在反向代理中,访问地址被nginx所拦截,而后,转发到其他位置;通过server进行处理,其中,server_name和listen用来匹配服务器,不针对其后的具体路径
-
server匹配成功后,通过rewrite对请求url进行改写(会优先匹配),或者通过location进行转发;其二者存在一个即可;可以配置多个location,location可以对具体的路径进行匹配
-
rewrite ^/(.*) http://www.baidu.com/ permanent; rewrite会先进行正则式的匹配,匹配完成后,在跳转到其后的路径中,其中:
- last:相当于apache里的(L)标记,表示完成rewrite匹配。(浏览器地址栏URL地址不变);
- break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。(浏览器地址栏URL地址不变)
- redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址
- permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
-
location在进行匹配时,=表示精确匹配,必须完全相同,~ 表示:指定的正则表达式要区分大小写,具体
-
location中,可以使用 proxy_pass进行转发,或者root或alias,index展示本地页面
- nagle算法:
- 当用户使用Telnet连接到远程服务器时,每一次击键操作就会产生1个字节数据,进而发送出去一个数据包,所以,在典型情况下,传送一个只拥有1个字节有效数据的数据包,却要发费40个字节长包头(即ip头20字节+tcp头20字节)的额外开销,这种有效载荷(payload)利用率极其低下的情况被统称之为愚蠢窗口症候群(Silly Window Syndrome)。
- 为了解决这种问题,规定如果包的大小满足MSS,那么可以立即发送,否则数据会被放到缓冲区,等到已经发送的包被确认了之后才能继续发送。通过这样的规定,可以降低网络里小包的数量,从而提升网络性能。
- 数据在满足一下两种情况下会发出:
- 积累的数据量满足mss
- 收到ack
- MTU: Maximum Transmit Unit,最大传输单元,即物理接口(数据链路层)提供给其上层(通常是IP层)最大一次传输数据的大小;以普遍使用的以太网接口为例,缺省MTU=1500 Byte,这是以太网接口对IP层的约束,如果IP层有<=1500 byte 需要发送,只需要一个IP包就可以完成发送任务;如果IP层有> 1500 byte 数据需要发送,需要分片才能完成发送,这些分片有一个共同点,即IP Header ID相同。
- MSS:Maximum Segment Size ,TCP提交给IP层最大分段大小,不包含TCP Header和 TCP Option,只包含TCP Payload ,MSS是TCP用来限制application层最大的发送字节数。如果底层物理接口MTU= 1500 byte,则 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte,如果application 有2000 byte发送,需要两个segment才可以完成发送,第一个TCP segment = 1460,第二个TCP segment = 540。
- DelayedAcknowledgment(TCP Delayed Ack):
- 假如需要单独确认每一个包的话,那么网络中将会充斥着无数的ACK,从而降低了网络性能。
- 不再针对单个包发送ACK,而是一次确认两个包,或者在发送响应数据的同时捎带着发送ACK,又或者触发超时时间后再发送ACK。通过这样的规定,可以降低网络里ACK的数量,从而提升网络性能
- tcp_nodelay :
- 一般默认会启用 Nagle‘s Algorithm,和 TCP Delayed Ack,则在写写–读的情况下会出现问题
- 第一个Write立刻发出去,但是包比较小,接收端不会立刻发送ack;第二个Write也比较小,第二个Write只有当收到第一个Write的ack才会发送,所以会导致延迟40ms才发送第二个Write
- TCP_NODELAY是用来 禁用 Nagle’s Algorithm
- tcp_nodelay只在keep-alive才启作用
- sendfile:
- 快速传输文件,减少了用户态到内核态的复制操作
- 文件结构:
- Nginx的配置文件nginx.conf位于其安装目录的conf目录下。
- nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location:
- main全局设置、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。
- mian 无标签,在最外层
- main块设置的指令将影响其他所有设置;
- server块的指令主要用于指定主机和端口
- upstream指令主要用于负载均衡,设置一系列的后端服务器
- location块用于匹配网页位置
- server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
- 转发规则
- 监听位置 以及其之前的字符串 被完全替换为 proxy_pass
- 当监听位置 如/A,不在域名后,如 http://wff.lietou.com/mm/A/cc/dd,则proxy_pass仅替换域名,其后部分保留
- proxy_pass 仅可以在匹配最左的情况下修改请求实际路径,否则仅域名及域名后部分
- location proxy_pass
- 监听 /
- proxy_pass http://127.0.0.1:8080/a
- 请求 http://wff.lietou.com/manager/index.jsp
- 实际请求路径 http://127.0.0.1:8080/amanager/index.jsp
- 域名以及域名后的“/”,被proxy_pass完全替换
- /A
- proxy_pass http://127.0.0.1:8080/a/ ;
- 请求 http://wff.lietou.com/Amanager/html
- 实际请求路径 http://127.0.0.1:8080/a/manager/html
-
- proxy_pass http://127.0.0.1:8080/a;
- 请求 http://wff.lietou.com/Amanager/html
- 实际请求路径 http://127.0.0.1:8080/amanager/html
-
- proxy_pass http://127.0.0.1:8080/a/
- 请求 http://wff.lietou.com/mm/A/cc/dd
- 实际 http://127.0.0.1:8080 /a/mm/A/cc/dd
-
- proxy_pass http://127.0.0.1:8080/a ;
- 请求 http://wff.lietou.com/mm/A/cc
- http://127.0.0.1:8080/a/mm/A/cc
-
使用
nginx 启动
- 进入其conf 路径下 打开cmd文件,不使用nginx.exe(exe会闪退,cmd会一直存在,可以操作)
- 在命令行中 nginx -t 为检查配置文件是否可用
- nginx -s stop 为关闭nginx,nginx -s reload 为更新 start nginx 为开启nginx
- 启动失败时,可以查看日志 error
nginx 请求接入本地服务器 (兼https转http,cookie转发)
- switchhost 找到url请求的域名(要求全拼)配置其转发到本地127.0.0.1
- 配置 nginx server 监听对应域名 (server_name) 请求端口(http 80 ,https 443)
- 配置 server location / { proxy_pass http://127.0.0.1:8080(端口号可能不同); }
- 当请求为https 时 ,转发需要配置crt 和key 证书(否则不会转发cookie)
- config 配置文件中 ,一般使用相对路径, ssl 文件的起始路径为conf路径下,log对应的起始路径为 logs
端口转发,路径代理
- switchhost配置域名 ,使请求指向本地
- nginx 监听对应域名以及端口
- 配置location ,执行转发
- 路径 /
- 端口转发 ,proxy_pass 指向新的域名 或者id:port
转发请求中添加请求头
- location中 使用add_header
- 如
location / {
add_header X-Requested-With XMLHttpRequest;
proxy_pass http://127.0.0.1:8848/ ;
# root html;
# index index.html index.htm;
}