【Nginx简介与环境搭建】
Nginx(发音同engine x),是来自于俄罗斯的高性能web服务器和反向代理服务器。在国内有新浪、网易、豆瓣、迅雷等多家网站使用。
负载均衡(load balance):使用Nginx作为代理服务器,接收用户请求,并将其“均匀地转发”给多台内部web服务器,不会出现负载集中在某台服务器的现象。
反向代理(reverse proxy):标准的代理是用户使用代理软件访问互联网上的多台web服务器,而反向代理指的是多个用户使用代理服务器访问多台内部web服务器的模式。
使用Nginx的优点:
支持高并发访问:在生产环境下支持高达5万以上的并发连接数。
内存消耗少:在5万并发连接环境下,开启10个worker进程,仅仅消耗150M内存。
容易配置:配置文件便于学习、阅读。
成本低廉:Nginx是免费的开源软件,无须付费。
支持rewrite重写规则:Nginx使用pcre进行正则表达式匹配,根据请求域名、url的不同,将http请求分发给不同的后端服务器。
内建健康检查功能:Nginx能够检测某台后端服务器是否宕机,不影响用户访问。
节省带宽:可以对静态资源进行gzip高效压缩,而通常浏览器都具有gzip解压缩功能。
性能稳定:使用Nginx作为反向代理服务器,有效避免了网络攻击对后端服务器的影响,提高了安全性。
【安装Nginx】
一. 安装依赖包:
1. 安装pcre:对正则表达式的支持。
tar -zxvf pcre-8.33.tar.gz
- cd pcre-8.33
- ./configure --prefix=/usr/local/pcre
- make && make install
2. 安装zlib:对gzip压缩的支持。
- tar -zxvf zlib-1.2.8.tar.gz
- cd zlib-1.2.8
- ./configure --prefix=/usr/local/zlib
- make && make install
3. 安装openssl:对ssl协议的支持。
- tar -zxvf openssl-1.0.0.tar.gz
- cd openssl-1.0.0
- ./config --prefix=/usr/local/openssl
- make && make install
二. 安装Nginx:
1. 创建日志目录:
- mkdir -p /opt/nginx/logs
2. 解压、配置:
- tar -zxvf nginx-1.6.0.tar.gz
- cd nginx-1.6.0
- ./configure --prefix=/usr/local/nginx \
- --error-log-path=/opt/nginx/logs/error.log \
- --http-log-path=/opt/nginx/logs/access.log \
- --with-pcre=/software/pcre-8.33 \
- --with-zlib=/software/zlib-1.2.8 \
- --with-http_ssl_module \
- --with-openssl=/software/openssl-1.0.0 \
- --with-http_stub_status_module \
- --with-http_realip_module \
- --with-http_gzip_static_module \
- --without-http_fastcgi_module \
- --without-http_memcached_module \
- --without-http_map_module \
- --without-http_geo_module \
- --without-http_autoindex_module \
- --with-poll_module
说明:
1. 使用\:表示多个物理行同属一个逻辑行.
2. 日志文件:error.log存放Nginx的错误日志,access.log存放用户访问日志.
3. 依赖关系:pcre、zlib、openssl需要设置为源码位置,而不是安装位置.
3. 编译、安装:
- make && make install
【最小配置】
1. 修改Nginx启动端口号:修改监听端口号为8080,因为只有root账号能够使用0-1024之间的端口号.
- vi /usr/local/nginx/conf/nginx.conf
- listen 8080;
2. 防火墙设置:开放8080端口
- su - root
- vi /etc/sysconfig/iptables
追加如下内容:
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
重启网卡:
- service iptables restart
【启动、关闭】
1. 启动nginx:并指定配置文件,参数-c为configure
- /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
2. 关闭nginx:参数-s为signal
- #等待worker进程处理完用户的当前请求,再进行关闭
- /usr/local/nginx/sbin/nginx -s quit
- #快速关闭
- /usr/local/nginx/sbin/nginx -s stop
3. 使用kill命令关闭:关闭主进程(master process),从进程(worker process)随之消亡.
- ps -ef | grep nginx
- kill 21531
2.Nginx的基本配置
对Nginx的配置文件nginx.conf的常用配置做详细的解释,并且以附件的形式给出实际的配置文件内容。
- user nick excelsoft;
说明:以root账号运行时,设置worker进程所属的用户/组。
- worker_processes 2;
说明:设置worker进程的数目,一般和CPU内核数一致,可设置为其2倍,以优化性能。
其他:
查看CPU内核数:cat /proc/cpuinfo | grep processor
如果为双核,则显示:
processor : 0
processor : 1
- error_log /opt/nginx/logs/error.log notice;
说明:指定错误日志的路径、级别,所有的级别包括debug、info、notice、warn、error、crit
- pid /opt/nginx/logs/nginx.pid;
说明:指定nginx启动时的进程文件。
其他:
1. nginx启动时,获取该文件的写权限,将当前进程(master process)的pid写入到nginx.pid文件。
2. 一旦nginx启动,该文件即成为可读的,无法再次写入,可以避免nginx的重复启动。
3. nginx.pid的文件内容是当前进程的pid,因此可以这样关闭:
kill `cat /opt/nginx/logs/nginx.pid`
不需要查看nginx的进程号:ps -ef | grep nginx
- worker_rlimit_nofile 65535;
说明:设置一个nginx进程能够打开的最大文件数。
其他:
1. 默认情况下,nginx进程能够打开的文件数受限于当前的操作系统。
2. 查看系统的最大文件数:当前的CentOS为1024。
ulimit -a
ulimit -n
- events {
- use epoll;
- worker_connections 65535;
说明:
1. 设置网络IO模型:
epoll:在Linux内核2.6以上版本可用,查看Linux版本:cat /proc/version
和标准的select模式比较,处理时间更短,采用了类似于数据库的索引机制,以空间换时间.
kqueue:适用于FreeBSD系统。
2. worker_connections:单个worker进程允许的最大并发连接数。
理论上,每台nginx服务器的最大连接数为worker_processes * worker_connections,
但是nginx进行调度时,分配用户请求给worker进程并不均匀,无法达到最大值。
- charset utf-8;
说明:http作用域,设置编码格式,可不统一设置。
- log_format access '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for" '
- '"$sent_http_content_type" "$request_time"';
说明:http作用域.
1. 该日志格式定义为access名称。
2. 日志格式:原有选项
$remote_addr:客户端IP地址,如果使用nginx进行了反向代理,获取的是nginx服务器的地址。
$remote_user:客户端用户名。
$time_local:客户端进行访问时的本地时间。 [21/Jun/2014:23:35:19 +0800]
$request:请求方式、路径、协议。 [GET /html/ HTTP/1.1]
$status:请求状态码,成功为200。
$body_bytes_sent:发送给客户端的文件主体大小。 [49]
$http_referer:记录从哪个页面链接过来的。
$http_user_agent:客户端浏览器。
$http_x_forwarded_for:使用反向代理后,真实的客户端IP地址。
3. 日志格式:追加选项
$sent_http_content_type:响应的内容类型。 [text/html; charset=utf-8]
$request_time:处理用户请求的时间,包括接收请求、返回响应的时间。 [0.000]
- access_log /opt/nginx/logs/access.log access;
说明:http作用域,指定日志文件的位置。
- sendfile on;
说明:http作用域,是否开启linux系统的零拷贝(zero copy)功能,针对普通的应用设为on。
针对下载(或者大量图片显示)等涉及大量磁盘IO的操作设为off,可以有效减少数据拷贝。
- tcp_nopush on;
说明:http作用域,默认为off,将小的数据包组装发送,避免大量数据包导致的网络拥塞。
- tcp_nodelay on;
说明:http作用域,设置响应无延迟,默认为on. 高版本的Linux系统允许和tcp_nopush同时使用。
- keepalive_timeout 65;
说明:http作用域,设置连接超时时间为65s
1. 如果有大量图片显示、大文件上传等,设置地调整为一个较大值。
2. 不能设置的太大,避免恶意的连接占用。
- gzip on;
说明:http作用域,开启gzip压缩功能。
1. 在服务端对响应内容进行压缩,客户端的浏览器具有gzip解压缩能力。
2. 压缩比率高达30%以上,有效节省传输带宽。
- gzip_min_length 1k;
说明:页面内容大于1k时才进行压缩,避免内容过少导致的越压越大现象。
- gzip_buffers 8 32k;
说明:压缩时需要的缓冲区大小,避免大文件的丢失. 一共8块、每块32k。
- gzip_http_version 1.1;
说明:默认为HTTP/1.1协议,早期的浏览器可能不支持gzip功能。
- gzip_comp_level 3;
说明:设置压缩比率,范围为1-9,不宜设置的过大、以避免影响了CPU的性能。
- gzip_types text/plain text/css text/javascript application/x-javascript application/xml;
说明:进行压缩的文件类型
1. gzip默认会对text/html进行压缩,因此不用指定。
2. 关于js:传统的标准类型为text/javascript,但js终究不是纯文本文件,
推荐使用application/javascript, 但事实上,application/javascript并没有很好的支持,
实际使用application/x-javascript,x前缀表示experimental。
- gzip_vary on;
说明:根据http响应头判断浏览器是否支持gzip压缩,不支持即不压缩。
使用火狐查看:
响应头:Vary: Accept-Encoding
请求头:Accept-Encoding gzip, deflate
- server_names_hash_bucket_size 128;
说明:后端服务器名字的哈希存储大小,如果服务器很多,可以适当调大一点。
- client_header_buffer_size 32k;
说明:说明:nginx默认使用该大小的buffer来读取header值。
- large_client_header_buffers 4 32k;
说明:如果header过大,使用该buffer来读取header。
- client_max_body_size 100m;
说明:客户端能够上传的最大文件大小。
- client_body_buffer_size 128k;
说明:处理客户端请求(通过POST发送的数据、文件上传)的buffer大小,
如果超过此大小限制,则全部或部分存储到一个临时文件。
启动、关闭:su - root
检查配置文件是否修改正确:
- /usr/local/nginx/sbin/nginx -t
平滑启动:
- kill -HUP `cat /opt/nginx/logs/nginx.pid`
3.虚拟目录和虚拟主机
下面简单介绍Nginx的虚拟目录和虚拟主机的配置,通过虚拟目录的设置可以直接访问Linux系统下面的静态资源文件,通过虚拟主机的设置可以在一台机器上模拟出多个逻辑上互不相干的独立主机。
<一>. 虚拟目录:
通过使用index选项可以指定相对路径,root选项指定的路径和用户的请求路径拼接成一个完成的Linux文件路径。使用alias选项可以指定一个Linux系统的绝对路径。
1. root选项:静态文件的路径为/software/html/index.html
- location /html {
- root /software;
- index index.html index.htm;
- }
2. alias选项:静态文件的路径为/software/html/index.html
- location /html {
- alias /software/html;
- index index.html index.htm;
- }
<二>. 虚拟主机:Virtual Host
1. 简介:虚拟主机是一种特殊的软硬件技术,允许将一台物理机器“虚拟”成多个完全独立的主机。
Nginx可以使用多种方式配置虚拟主机,下面仅介绍基于域名的配置方式。
需要进行DNS配置,一个物理主机设置多个域名,然后配置Nginx,让其识别不同的域名。
2. 进行DNS的设置:
Windows平台:C:\WINDOWS\system32\drivers\etc下面的hosts文件追加
- 192.168.142.56 www.excelsoft.com excelsoft.com blog.excelsoft.com www.blog.com image.excelsoft.com
Linux平台:编辑/etc/hosts文件,给本机追加多个域名。
- 127.0.0.1 localhost ... www.excelsoft.com excelsoft.com blog.excelsoft.com www.blog.com image.excelsoft.com
3. 给nginx.conf配置虚拟主机:一共设置了3台虚拟主机,都在80端口进行监听。
第一台虚拟主机:独立的图片image域名,关闭日志功能off
- server {
- listen 80;
- server_name image.excelsoft.com;
- location / {
- root /software/image;
- }
- access_log off;
- }
第二台虚拟主机:excelsoft域名,及其二级域名blog;但是不包括image.excelsoft.com域名,
因为二级域名image按照书写顺序和第一台虚拟主机相匹配。
- server {
- listen 80;
- server_name www.excelsoft.com excelsoft.com *.excelsoft.com;
- location / {
- root /software/html;
- index index.html index.htm;
- }
- access_log /opt/nginx/logs/access.excelsoft.log access;
- }
第三台虚拟主机:
- server {
- listen 80;
- server_name www.blog.com;
- location / {
- root /software/blog;
- index index.html index.htm;
- }
- access_log /opt/nginx/logs/access.blog.log access;
- }
<三>. 进行测试:su - root
配置校验:/usr/local/nginx/sbin/nginx -t
平滑重启:kill -HUP `cat /opt/nginx/logs/nginx.pid`
测试地址:
http://image.excelsoft.com/hello.gif
http://www.excelsoft.com
http://blog.excelsoft.com
http://www.blog.com
4.日志切割和环境变量
在真实的Nginx实践过程中,我们通常都会对Nginx的访问日志进行切割,即按照一定的周期生成一个独立的Nginx访问日志文件,以避免存在文件体积过于庞大的日志文件。一方面有助于实际的错误排查,更重要的是有利于Nginx对访问文件的写入。同时,可以将Nginx的安装路径加入到环境变量,甚至可以编写启动关闭脚本,以方便实际操作。
<一>. 切割日志文件:
1. 编写脚本:su - root
进入主目录:cd ~
编写脚本:vi split-nginx-log.sh
- #!/bin/bash
- log_path="/opt/nginx/logs"
- dir_name=`date -d "yesterday" +%Y%m`
- file_name=`date -d "yesterday" +%Y.%m_%d`
- mkdir -p ${log_path}/${dir_name}
- mv ${log_path}/access.log ${log_path}/${dir_name}/${file_name}.log
- kill -USR1 `cat ${log_path}/nginx.pid`
细节说明:
1. 前一天的日期:date -d "yesterday" +%Y%m%d
2. 递归创建目录,如果已存在则不创建:mkdir -p ${log_path}/${dir_name}
3. 对日志文件重命名:mv access.log new.access.log
4. 通知nginx主进程重新打开日志文件:kill -USR1 `cat /opt/nginx/logs/nginx.pid`
2. 赋予执行权限、执行:
- ls -al
- chmod 744 split-nginx-log.sh
- ./split-nginx-log.sh
3. 定时调度:每天零点切割日志
- crontab -e
- 00 00 * * * /root/split-nginx-log.sh
<二>. 设置环境变量:
1. 编辑当前用户PATH:
显示PATH:echo $PATH
用户主目录:cd ~
编辑文件、追加如下内容:vi .bash_profile
- NGINX_HOME=/usr/local/nginx
- PATH=$NGINX_HOME/sbin:$PATH
- export PATH
立即生效:source .bash_profile
2. 启动、关闭:
- nginx -c /usr/local/nginx/conf/nginx.conf
- nginx -s quit
3. 可执行脚本:
启动:vi start-nginx.sh
- nginx -c /usr/local/nginx/conf/nginx.conf
关闭:vi stop-nginx.sh
- nginx -s quit
执行权限:
- chmod 744 start-nginx.sh
- chmod 744 stop-nginx.sh
执行脚本:
- ./start-nginx.sh
- ./stop-nginx.sh
5.Nginx与Tomcat的整合
DK(Java Development Tookkit)中包含了jre(Java Runtime Environment),而jre是一个java应用运行的基础平台,为此需要在Linux系统上面事先安装JDK环境。然后再安装Tomcat作为web服务器,最后可以将nginx和tomcat进行整合,作为负载均衡和反向代理的基础。
<一>. 安装JDK:
上传文件:使用nick账号上传jdk-6u45-linux-i586.bin到/software下面。
进行安装:
- su - nick #切换账号
- cd /software #切换路径
- mv jdk-6u45-linux-i586.bin /usr/local #移动文件
- cd /usr/local #切换路径
- chmod 744 jdk-6u45-linux-i586.bin #修改权限:当前用户可执行
- ./jdk-6u45-linux-i586.bin #进行安装
- rm jdk-6u45-linux-i586.bin #删除安装程序
- mv jdk1.6.0_45 jdk #重命名安装目录
设置环境变量:
- echo $PATH #查看PATH
- cd ~ #切换到主目录
- vi .bash_profile #编辑当前用户的环境变量
追加如下内容:
- JAVA_HOME=/usr/local/jdk
- PATH=$JAVA_HOME/bin:$PATH
- CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar
- export JAVA_HOME PATH CLASSPATH
- source .bash_profile #立即生效
- java -version #验证是否安装成功
<二>. 安装Tomcat:
上传文件:使用nick账号上传apache-tomcat-6.0.37.tar.gz到/software下面。
- su - nick #切换账号
- cd /software #切换路径
- mv apache-tomcat-6.0.37.tar.gz /usr/local #移动文件
- cd /usr/local #切换路径
- tar -zxvf apache-tomcat-6.0.37.tar.gz #进行安装
- rm apache-tomcat-6.0.37.tar.gz #删除安装程序
- mv apache-tomcat-6.0.37 tomcat #重命名安装目录
启动/关闭:
- cd /usr/local/tomcat/bin #进入bin路径
- ./startup.sh #启动
- ./shutdown.sh #启动
设置环境变量:
- echo $PATH #查看PATH
- cd ~ #切换到主目录
- vi .bash_profile #编辑当前用户的环境变量
追加如下内容:
- CATALINA_HOME=/usr/local/tomcat
- PATH=$CATALINA_HOME/bin:$PATH
- export CATALINA_HOME PATH
- source .bash_profile #立即生效
进行访问:任意路径都可执行
- startup.sh #启动
- shutdown.sh #关闭
<三>. nginx与tomcat整合:
项目内部的动态、静态请求都转发至tomcat,项目外部的静态资源请求转发至图片服务器。
1. 代理配置:http作用域.
- proxy_connect_timeout 90;
说明:nginx和后端服务器的请求连接超时时间,默认为60s
- proxy_read_timeout 90;
说明:连接成功后,排队等候处理超时时间,默认为60s
- proxy_send_timeout 90;
说明:后端服务器的数据发送超时时间,默认60s
- proxy_buffer_size 16k;
说明:代理缓冲区,保留后端服务器响应的第一部分,通常为响应的头部
- proxy_buffers 4 32k;
说明:保留后端服务器的响应数据,每块缓冲区32k,一共有4块
- proxy_busy_buffers_size 64k;
说明:系统繁忙时,申请更大的代理缓冲区,推荐为上述值的2倍
- proxy_temp_file_write_size 128k;
说明:缓冲区无法保存时,将数据写至临时文件,默认存放目录为nginx安装目录下的/proxy_temp
2. 设置后端tomcat访问路径:http作用域
- upstream tomcat_server {
- server 192.168.142.56:8080;
- }
3. 项目内部的资源请求转发给tomcat:
- server {
- listen 80;
- server_name www.excelsoft.com;
- location / {
- proxy_pass http://tomcat_server;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- index index.html index.htm index.jsp index.do;
- access_log /opt/nginx/logs/access.excelsoft.log access;
- }
- location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
- proxy_pass http://tomcat_server;
- expires 15d;
- access_log off;
- }
- location ~ \.(js|css)$ {
- proxy_pass http://tomcat_server;
- expires 1h;
- access_log off;
- }
- }
4. 静态资源虚拟主机:
- server {
- listen 80;
- server_name static.excelsoft.com;
- root /software/static;
- access_log off;
- location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
- expires 15d;
- }
- location ~ \.(js|css)$ {
- expires 1h;
- }
- }
<四>. 测试验证:su - root
1. 校验nginx.conf合法性:
- /usr/local/nginx/sbin/nginx -t
2. nginx平滑重启:
- kill -HUP `cat /opt/nginx/logs/nginx.pid`
6.代理缓存与负载均衡
简要介绍Nginx的代理缓存,以及使用多台Tomcat服务器进行负载均衡。
<一>. 代理数据存放目录:
- proxy_temp_path /software/proxy_temp;
说明:代理临时目录,存在于http作用域,nginx用作代理时,用来存放和后端服务器进行交互的相关数据, 如前端用户的请求、后端服务器的响应,默认位置为nginx安装路径下面的/proxy_temp。
- proxy_cache_path /software/proxy_cache levels=1:2 keys_zone=cache_web:16m inactive=1h max_size=512m;
说明:代理缓存目录,存在于http作用域,nginx进行web缓存时,将静态资源缓存到nginx当前所在的机器。
1. proxy_temp_path和proxy_cache_path必须指定为同一分区。
2. 参数levels=1:2 指定缓存空间为二级hash目录,第一级为1个字符,第二级为2个字符,比如/7/c2。
3. 参数keys_zone=cache_web:16m 用户存放key和元数据的缓存区间,命名为cache_web,16m大小。
4. 参数inactive=1h 如果资源在1h内未被请求,从缓存区中清除。
5. 参数max_size=512m 指定本地缓存空间的大小,如果资源过于庞大时,按照LRU算法进行清除。
<二>. 定义服务器集群:
- upstream blog_server_cluster {
- server 192.168.142.56:8080 weight=1 max_fails=2 fail_timeout=30s;
- server 192.168.142.78:8080 weight=2 max_fails=2 fail_timeout=30s;
- server 192.168.142.91:8080 weight=2 max_fails=2 fail_timeout=30s;
- }
说明:存在于http作用域,同一组服务器相互之间进行负载的均衡。
1. weight 指定各个服务器的权重,默认为1,权重越大处理的负载越多。
2. max_fails 指定失败请求次数,大于该次数时,nginx认为该服务器处于不可用状态。
3. fail_timeout 失败请求时间,大于该时间,nginx认为本次请求失败。
<三>. 设置web缓存:
- proxy_cache cache_web;
- proxy_cache_key $host$uri$is_args$query_string;
- proxy_cache_valid 200 304 1d;
- proxy_cache_valid 301 302 1m;
- proxy_cache_valid any 1m;
说明:web缓存,存在于location作用域,将后端服务器的静态资源缓存到nginx所在的本地机器。
1. proxy_cache 指定为上述定义的缓存区域。
2. proxy_cache_key 指定缓存所使用的key的组合字符串,然后用md5进行加密。
$host 主机名,如www.excelsoft.com。
$uri 请求的项目内部路径,如/user/list.jsp。
$is_args 如果有请求参数则为?符号,否则为空字符串""。
$query_string 请求参数字符串。
3. proxy_cache_valid 对不同状态码的URL设置不同的缓存时间(1d/1h/1m)。
<四>. http状态码:status code
1. 2xx:success
200 请求成功 [Ok]
2. 3xx:redirect
301 请求的资源被移除到新的位置,新的URI将在响应的Location字段中返回 [Moved Permanently]
302 请求的资源临时从不同的URI进行响应 [Found]
304 重复的请求,该响应不包含消息体 [Not Modified]
3. 4xx:request error
404 请求的资源未能在服务器上找到 [Not Found]
403 找到请求的资源,但是无权限访问 [Forbidden]
4. 5xx:server error
500 程序出错,服务器无法处理 [Internal Server Error]
502 错误网关,内部网络连接设置不正确,或者当前服务器待处理的连接过多,以至于连接超时 [Bad Gateway]
到目前为止,已经比较全面的介绍了Nginx用作反向代理和负载均衡的诸多知识,为了能从整体上对配置文件有一个清楚地把握,下面给出nginx.conf文件的详尽内容,具体细节可参见之前的几篇博客:
- user nick excelsoft;
- worker_processes 2;
- error_log /opt/nginx/logs/error.log notice;
- pid /opt/nginx/logs/nginx.pid;
- worker_rlimit_nofile 65535;
- events {
- use epoll;
- worker_connections 65535;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- charset utf-8;
- log_format access '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for" '
- '"$sent_http_content_type" "$request_time"';
- access_log /opt/nginx/logs/access.log access;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
- gzip on;
- gzip_min_length 1k;
- gzip_buffers 8 32k;
- gzip_http_version 1.1;
- gzip_comp_level 3;
- gzip_types text/plain text/css text/javascript application/x-javascript application/xml;
- gzip_vary on;
- server_names_hash_bucket_size 128;
- client_header_buffer_size 32k;
- large_client_header_buffers 4 32k;
- client_max_body_size 100m;
- client_body_buffer_size 128k;
- proxy_connect_timeout 90;
- proxy_read_timeout 90;
- proxy_send_timeout 90;
- proxy_buffer_size 16k;
- proxy_buffers 4 32k;
- proxy_busy_buffers_size 64k;
- proxy_temp_file_write_size 128k;
- proxy_temp_path /software/proxy_temp;
- proxy_cache_path /software/proxy_cache levels=1:2 keys_zone=cache_web:16m inactive=1h max_size=512m;
- upstream blog_server_cluster {
- server 192.168.142.56:8080 weight=1 max_fails=2 fail_timeout=30s;
- server 192.168.142.78:8080 weight=2 max_fails=2 fail_timeout=30s;
- server 192.168.142.91:8080 weight=2 max_fails=2 fail_timeout=30s;
- }
- server {
- listen 80;
- server_name www.excelsoft.com;
- location / {
- proxy_pass http://blog_server_cluster;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- index index.html index.htm index.jsp index.do;
- access_log /opt/nginx/logs/access.excelsoft.log access;
- }
- location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
- proxy_pass http://blog_server_cluster;
- proxy_cache cache_web;
- proxy_cache_key $host$uri$is_args$query_string;
- proxy_cache_valid 200 304 1d;
- proxy_cache_valid 301 302 1m;
- proxy_cache_valid any 1m;
- expires 15d;
- access_log off;
- }
- location ~ \.(js|css)$ {
- proxy_pass http://blog_server_cluster;
- proxy_cache cache_web;
- proxy_cache_key $host$uri$is_args$query_string;
- proxy_cache_valid 200 304 1d;
- proxy_cache_valid 301 302 1m;
- proxy_cache_valid any 1m;
- expires 1h;
- access_log off;
- }
- }
- server {
- listen 80;
- server_name static.excelsoft.com;
- root /software/static;
- access_log off;
- location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
- expires 15d;
- }
- location ~ \.(js|css)$ {
- expires 1h;
- }
- }
- }