Nginx的反向代理,负载均衡,缓存,URL重写以及读写分离
来源:互联网 发布:趴在桌上睡觉知乎 编辑:程序博客网 时间:2024/06/07 00:06
Nginx.conf
这里主要讲解一下nginx的主配置文件nginx.conf。其中主要分为四个部分:main(全局配置)、server(主机配置)、upstream(上游服务器,主要为反向代理、负载均衡的相关配置)和location(可以正则匹配)
(main)全局配置是设置影响全局配置的指令的。定义有
日志位置,
执行的用户,
worker进程的数量。一般来说是cpu的核数。
worker_cpu_affinity设置CPU,在高并发的情况下设置cpu的粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。
use epoll,设置Linux的epoll的IO模型。
http服务器相关。
#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { use epoll worker_connections 1024;}
看看监听在80端口的进程与用户。
[root@web2 html]# lsof -i :80COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnginx 1263 root 6u IPv4 13016 0t0 TCP *:http (LISTEN)nginx 1265 nginx 6u IPv4 13016 0t0 TCP *:http (LISTEN)[root@web2 html]#http服务器。
include /etc/nginx/mime.types; 设定mime类型。
sendfile on 开启高效文件传输模式。
keepalive_timeout 60 长连接超时时间。
send_timeout 指定客户端的超时时间。
tcp_nopush 不做推送 结合nagle算法,不着急发数据,等数据积攒多点再发
tcp_nodelay 不做等待 有数据不等待,直接就发送
gzip on 压缩传输开启
client_max_body_size 10m 允许客户端的最大文件字节数
http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on;server { } 定义虚拟主机
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.php index.html index.htm; }
反向代理(将访问的forum内容转到12的forum)
location /forum { proxy_pass http://192.168.217.12:80/forum; }所有的访问 以/fprum开头的都做反向代理。但是封装一个真实客户端的IP地址。
location * ^/forum { proxy_pass http://192.168.217.12; proxy_set_header X-Real-IP $remote_addr; }将访问全部代理到后台去。
location / { proxy_pass http://192.168.217.12/; proxy_set_header X-Real-IP $remote_addr; }配置一个组的反向代理并且附带健康检查(必须定义在server外面)(upstream模块加入,将反向代理定义成了一个组,所以在location那里直接可以根据正则反向代理)
upstream realserver { server 192.168.217.11:80 weight=1 max_fails=2 fail_timeout=2; server 192.168.217.12:80 weight=1 max_fails=2 fail_timeout=2; } server { listen 80; server_name localhost; location / { proxy_pass http://realserver/; proxy_set_header X-Real-IP $remote_addr; }
负载均衡
通过该方法将提供不同功能的服务器区分开。php的专门有个组,图片的专门有个组。
upstream phpserver { server1; server2;}upstream imgsrvs { server3; server4;}location ~* \.php$ { fastcgi_pass http://phpsrvs;}location ~* "\.(jpg|jpeg|gif|png)$" { proxy_pass http://imgsrvs;}
[root@web2 nginx]# cat /var/log/nginx/access.log |awk -F" " '{ip[$1]++} END{for(i in ip){printf "%s%+10s\n",i,ip[i]}}'127.0.0.1 1192.168.217.1 78192.168.217.10 25192.168.217.131 110
然后排序就好。
[root@web2 nginx]# cat /var/log/nginx/access.log |awk -F" " '{ip[$1]++} END{for(i in ip){printf "%s%+10s\n",i,ip[i]}}'|sort -k2 -rn192.168.217.131 110192.168.217.1 78192.168.217.10 25127.0.0.1 1
设置缓存。
proxy_cache_path /nginx/cache/first levels=1:2 keys_zone=first:20m max_size=1g; server { listen 80; server_name localhost; location / { proxy_pass http://realserver/; proxy_set_header X-Real-IP $remote_addr; proxy_cache first; proxy_cache_valid 200 10m; }
proxy_cahce:设置高速缓存的路径和其他参数,缓存数据存储在文件中。
levels = levels:设置缓存目录的层数,如levels=1:2 表示的是创建两层目录缓存,最多创建三层。
keys_zone=first:20m 为共享内存起个名字。
max_size=1g 最大容量。
在location 中定义谁去使用这些缓存
proxy_cache firsh; 使用缓存first
proxy_cache_valid 200 10m; 设置缓存的响应代码为200的缓存10分钟。
[root@web2 nginx]# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: [emerg] mkdir() "/nginx/cache/first" failed (2: No such file or directory)nginx: configuration file /etc/nginx/nginx.conf test failed[root@web2 nginx]# mkdir -pv /nginx/cache/firstmkdir: created directory `/nginx'mkdir: created directory `/nginx/cache'mkdir: created directory `/nginx/cache/first'创建目录后查看nginx的缓存文件。
[root@web2 nginx]# tree ..└── cache └── first ├── 1 │ └── bf │ └── 5cdae18ec79d104f95aa394163431bf1 └── 2 └── 3b └── 7b14020849ae34e40fefcb6a7daf03b26 directories, 2 files
给客户端显示是谁提供的缓存,还有是否命中缓存。
[root@localhost ~]# curl -I 192.168.217.13HTTP/1.1 200 OKServer: nginx/1.4.2Date: Fri, 17 Mar 2017 05:55:33 GMTContent-Type: text/htmlContent-Length: 66Connection: keep-aliveLast-Modified: Wed, 15 Mar 2017 05:14:05 GMTETag: "42-54abe0369ce83"Accept-Ranges: bytesX-Via: 192.168.217.13 ##这里有显示X-Cache: EXPIRED ##这时缓存过期了,命中时是HIT或者直接这么写。
server { listen 80; server_name localhost; add_header X-Cache "$upstream_cache_status from $server_addr"; location / { proxy_pass http://realserver/; proxy_set_header X-Real-IP $remote_addr; proxy_cache first; proxy_cache_valid 200 10m; }访问后的显示。
[root@localhost ~]# curl -I 192.168.217.13HTTP/1.1 200 OKServer: nginx/1.4.2Date: Fri, 17 Mar 2017 06:01:37 GMTContent-Type: text/htmlContent-Length: 66Connection: keep-aliveLast-Modified: Wed, 15 Mar 2017 05:14:05 GMTETag: "42-54abe0369ce83"X-Cache: HIT from 192.168.217.13Accept-Ranges: bytes
URL重写
location / { root html; index index.html index.htm; rewrite ^/bbs/(.*)$ http://192.168.217.11/forum/$1; }
[root@localhost ~]# curl -I 192.168.217.13/bbs/index.htmlHTTP/1.1 302 Moved TemporarilyServer: nginx/1.4.2Date: Sat, 18 Mar 2017 04:43:22 GMTContent-Type: text/htmlContent-Length: 160Connection: keep-aliveLocation: http://192.168.217.12/forum/index.html
302临时重定向(通常来说,定义到其他主机上就是临时重定向,转到本机上就是永久重定向。但是主要还是用redirect,permanent定义的是永久重定向还是临时重定向)
实现读写分离
location / { proxy_pass http://192.168.217.11/; if ($request_method = "PUT") { proxy_pass http://192.168.217.12; } }
- Nginx的反向代理,负载均衡,缓存,URL重写以及读写分离
- Nginx 反向代理、负载均衡、页面缓存、URL重写以及读写分离
- Nginx: Nginx反向代理、负载均衡、缓存、URL重写及读写分离
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- (转)NGINX 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Redis-3.2.8的集群安装部署
- [字符串操作]poj 1274 展开字符串
- QTableWidget操作之上移,下移,删除
- jsp使用servlet实现验证码
- 移动端 Tips插件代码
- Nginx的反向代理,负载均衡,缓存,URL重写以及读写分离
- 深入PHP面向对象、模式与实践——高级特性(5)
- HTML5之HTML+CSS3技术介绍
- Unity Shader Example 26 (Texture2DArray)
- 4种数据源
- L1-007. 念数字
- C++知识文档六_对象常量_静态成员_友元_抽象类
- linux注册字符设备和卸载字符设备函数
- Hadoop 2.7.2 最小集群搭建