Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。自Nginx 发布来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Windows下Nginx的启动、停止等命令
C:\server\nginx-1.0.2>start nginx或
C:\server\nginx-1.0.2>start nginx.exe
C:\server\nginx-1.0.2>nginx.exe -s stop或
C:\server\nginx-1.0.2>nginx.exe -s quit
注:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。
C:\server\nginx-1.0.2>nginx.exe -s reload
当配置信息修改,需要重新载入这些配置时使用此命令。
C:\server\nginx-1.0.2>nginx.exe -s reopen
C:\server\nginx-1.0.2>nginx -v
nginx.conf由多个块组成,最外面的块是main,main包含events和http,http包含多个upstream和多个server,server又包含多个location:
main(全局设置)、server(虚拟主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。
当用户请求js,css等静态资源时有当前nginx服务器处理, 请求php动态脚本代码时由其他的服务器处理(反向代理)
#配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取。
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /data/www/wugk;
#expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力
expires 3d;
}
#动态页面交给其他服务器处理
location ~ .*\.(php|jsp|cgi)?$
{
#发送给其他服务器处理
}
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连的 客户端,此时代理服务器对外就表现为一个服务器。
反向代理又称为Web服务器加速,是针对Web服务器提供加速功能的。它作为代理
Cache,但并不针对浏览器用户,而针对一台或多台特定Web服务器(这也是反向代理名
称的由来)。代理服务器可以缓存一些web的页面,降低了web服务器的访问量,所以可
以降低web服务器的负载。web服务器同时处理的请求数少了,响应时间自然就快了。同
时代理服务器也存了一些页面,可以直接返回给客户端,加速客户端浏览
当用户放到php文件时,将该请求交给apache服务器处理php文件
server {
#侦听192.168.8.x的80端口
listen 80;
server_name www.example.cn;
#对php后缀的进行请求
location ~ .*\.php$ {
#定义服务器的默认网站根目录位置
root /root;
#定义首页索引文件的名称
index index.php index.html index.htm;
#请求转向apache服务器,apache服务器运行在81端口上
proxy_pass http://localhost:81;
#以下是一些反向代理的配置可删除.
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#允许客户端请求的最大单文件字节数
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数,
client_body_buffer_size 128k;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 90;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 90;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
}
}
后台服务器组成了一个服务器集群(多台服务器). 有中间服务器(nginx)接受到请求分发给不同的服务器后台. 该nginx就是一个负载均衡服务器.
nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
在http节点里添加:
#定义负载均衡设备的 ip及设备状态
upstream myServer {
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
[ip_hash | fair | url_hash]
}
在需要使用负载的server节点下添加
proxy_pass http://myServer;
upstream 每个设备的状态:
down 表示单前的server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails 次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。