安装部分
懒人就直接使用yum安装Nginx了。
1.创建http:///etc/yum.repos.d/nginx.repo文件 ,拷贝如下代码放入:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
保存退出。
2.运行
yum install nginx* -y
几分钟搞定。
3.设置防火墙
这里使用的centOS7 自带的防火墙
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
4.启动
systemctl start nginx
测试是否安装成功,在终端中执行usr/local/nginx/sbin/nginx, 然后在浏览器中输入localhost,若出现 welcome to nginx 则表示安装成功。
若要关闭Nginx,则在终端中 ps aux | grep nginx ,然后kill 掉相关进程即可。或者输入 usr/local/nginx/sbin/nginx -s stop来停止,该命令 -s 表示将signal 发送到nginx主进程中。
配置部分
现在可以开始设置nginx了,全局配置文件放在/etc/nginx/nginx.conf
vim /etc/nginx/nginx.conf
nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location:
main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。
main块设置的指令将影响其他所有设置;
server块的指令主要用于指定主机和端口;
upstream指令主要用于负载均衡,设置一系列的后端服务器;
location块用于匹配网页位置。
#是个主模块指令,指定Nginx Worker进程运行用户以及用户组
user nginx;
#是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。
worker_processes 1;
#是个主模块指令,用来定义全局错误日志文件。
error_log /var/log/nginx/error.log warn;
#进程文件
pid /var/run/nginx.pid;
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
#worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。
#在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
#进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效
worker_rlimit_nofile 65535;
events {
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 65535;
}
#设定http服务器
http {
#实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度
include /etc/nginx/conf.d/*.conf;
#属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
#用来设置允许客户端请求的最大的单个文件字节数
client_max_body_size 20m;
#用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的Cookie,可以增加缓冲区大小。这里设置为32K;
client_header_buffer_size 32K;
#用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存量为4个128K;
large_client_header_buffers 4 32k;
#参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;
Sendfile on;
#将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;
tcp_nopush on;
#设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;
keepalive_timeout 60;
#设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误;
client_header_timeout 10;
#设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60;
client_body_timeout 10;
#指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
send_timeout 10;
access_log /var/log/nginx/access.log main;
#gzip on;
#upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
#qq.com负载均衡器的名称
upstream host.domain{
ip_hash;
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.18.104:82 weight=3;
server 192.168.18.104:83 weight=3 down;
server 192.168.18.104:84 weight=3; max_fails=3 fail_timeout=20s;
server 192.168.18.104:85 weight=4;;
}
}
Nginx的负载均衡模块目前支持4种调度算法:
下面进行分别介绍,其中后两项属于第三方的调度方法。
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
Weight:指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:
down:表示当前的server暂时不参与负载均衡;
backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻;
max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误;
fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
注意,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。
server独立使用conf文件。保存到/etc/nginx/conf.d/文件夹下面,通过上面的include加载进来。
建立文件
vim /etc/nginx/conf.d/default.conf
#虚拟主机的配置
server {
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name www.qq.com www.baidu.com;
#设置网页的默认编码格式
#charset koi8-r;
#定义本虚拟主机的访问日志
#access_log /var/log/nginx/log/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
#所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root /wwwroot/www.qq.com;
expires 30d;
}
#JS和CSS缓存时间设置
location ~ .*\.(js|css)?$ {
root /wwwroot/www.qq.com;
expires 1d;
}
#将upload和html下的所有文件都交给nginx来处理,当然,upload和html目录包含在/web/wwwroot/html目录中。
location ~ ^/(upload|html)/ {
root /web/wwwroot/www.qq.com;
expires 30d;
}
#所有jsp的页面均交由tomcat或resin处理
location ~ (\.jsp)|(\.do)$ {
proxy_pass http://host.domain;
proxy_redirect off;
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;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
#启用nginx status 监听页面
location /nginxstatus {
stub_status on;
access_log on;
}
http://blog.csdn.net/tonyxf121/article/details/7957830博客对反向代理和负载均衡有更详细的介绍。