1、安裝Nginx所需的pcre-devel庫
yum install -y gcc gcc-c++ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz tar zxvf pcre-8.33.tar.gz cd pcre-8.33
./configure --prefix=/usr/local/pcre make
make install
2、安裝Tengine
yum install openssl openssl-devel wget http://tengine.taobao.org/download/tengine-1.5.1.tar.gz tar zxvf tengine-1.5.1.tar.gz cd tengine-1.5.1 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-pcre=/usr/local/pcre-8.33 make make install
注意:--with-pcre=/usr/local/software/pcre-8.33 指定的是源碼包解壓的路徑
3、配置Tengine
創建用戶組和用戶
groupadd www
useradd -g www www
編輯主配置文件
vi /usr/local/nginx/conf/nginx.conf
user www www; #指定運行的用戶和用戶組 worker_processes 4; #指定要開啟的進程數,一般為CPU的核心數或兩倍 error_log logs/error.log crit; #全局日志 debug|info|notice|warn|error|crit pid logs/nginx.pid; #指定進程id的存儲文件位置 worker_rlimit_nofile 65535; events { use epoll; #對於Linux系統epoll工作模式是首選 worker_connections 65536; #每個進程的最大連接數 #在執行操作系統命令"ulimit -n 65536"后worker_connections的設置才能生效 } 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; charset utf-8; server_names_hash_bucket_size 256; client_header_buffer_size 32k; large_client_header_buffers 4 128k; #最大緩存為4個128KB client_max_body_size 20m; #允許客戶端請求的最大的單個文件字節數 sendfile on; #開啟高效文件傳輸模式 tcp_nopush on; #用於防止網絡阻塞 tcp_nodelay on; #用於防止網絡阻塞 keepalive_timeout 60; #超過這個時間之后服務器會關閉該連接 client_header_timeout 10; #客戶端請求頭讀取超時時間,超過這個時間客戶端還沒發數據NGINX就返回408錯誤 client_body_timeout 10; #客戶端請求主體讀取超時時間,超過這個時間客戶端還沒發數據NGINX就返回408錯誤 server_tokens on; #不顯示nginx版本信息 include gzip.conf; #HttpGzip的配置文件 include proxy.conf; #配置代理文件 include vhost.conf; #虛擬主機的配置文件 include backend.conf; #配置后端的服務器列表文件 }
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
#10m是會話狀態存儲空間 rate=1r/s是每個地址每秒只能請求一次 (在vhost.conf還有配置)
limit_conn_zone $binary_remote_addr zone=req_one:10m;
#設置IP並發 (在vhost.conf還有配置)
編輯HttpGzip的配置文件
vi /usr/local/nginx/conf/gzip.conf
gzip on; gzip_min_length 1k; #設置允許壓縮的頁面最小字節數。 gzip_buffers 4 16k; #用來存儲gzip的壓縮結果 gzip_http_version 1.1; #識別HTTP協議版本 gzip_comp_level 2; #設置gzip的壓縮比 1-9 1壓縮比最小但最快 9相反 gzip_types text/plain application/x-javascript text/css application/xml; #指定壓縮類型 gzip_proxied any; #無論后端服務器的headers頭返回什么信息,都無條件啟用壓縮 gzip_vary on; gzip_disable "MSIE [1-6]."; #禁用IE6的gzip壓縮
編輯代理文件
vi /usr/local/nginx/conf/proxy.conf
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_body_buffer_size 512k; proxy_connect_timeout 30; proxy_read_timeout 30; proxy_send_timeout 30; proxy_buffer_size 32k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k;
編輯虛擬主機的配置文件
vi /usr/local/nginx/conf/vhost.conf
server { listen 80; server_name localhost; index index.jsp index.htm index.html; root /usr/local/tomcat7/webapps/ROOT; location / {
proxy_pass http://backend; proxy_pass_header Set-Cookie; } location /NginxStatus { stub_status on; access_log off; auth_basic "NginxStatus"; } }
location ~ .*\.(zip|thumb)$ {
root /usr/local/download;
limit_conn req_one 1; #IP下載並發為1 req_one在nginx.conf中配置的 limit_conn_zone $binary_remote_addr zone=req_one:10m;
limit_rate 500k; #限速500k
expires 30d;
}
limit_req zone=req_one burst=100; #req_one在nginx.conf中有配置,當超過rate時請求就會放到burst中burst也滿了就503 req_one在nginx.conf中配置的 llimit_req_zone $binary_remote_addr zone=req_one:10m rate=100r/s;
limit_rate_after 3m;
limit_rate 512k; 這兩句話的意思是先以最快的速度下載3MB,然后再以512KB的速度下載。
將擴展名為zip,thumb的靜態文件都交給Nginx處理,root為靜態文件的目錄,而expires用為指定靜態文件的過期時間30天。
location ~ ^/(upload|download)/ {
root /usr/local;
expires 30d;
}
將upload,download下的所有文件都交給Nginx處理,upload和download目錄包含在/usr/local目錄中
編輯后端的服務器列表文件
vi /usr/local/nginx/conf/backend.conf
upstream backend { ip_hash; server 127.0.0.1:8080 max_fails=1 fail_timeout=60s; }
4、設置Tengine開機啟動
vi /etc/rc.d/init.d/nginx
#!/bin/bash # Tengine Startup script# processname: nginx # chkconfig: - 85 15 # description: nginx is a World Wide Web server. It is used to serve # pidfile: /var/run/nginx.pid # config: /usr/local/nginx/conf/nginx.conf nginxd=/usr/local/nginx/sbin/nginx nginx_config=/usr/local/nginx/conf/nginx.conf nginx_pid=/usr/local/nginx/logs/nginx.pid RETVAL=0 prog="nginx" # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -x $nginxd ] || exit 0 # Start nginx daemons functions. start() { if [ -e $nginx_pid ];then echo "tengine already running...." exit 1 fi echo -n $"Starting $prog: " daemon $nginxd -c ${nginx_config} RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx return $RETVAL } # Stop nginx daemons functions. stop() { echo -n $"Stopping $prog: " killproc $nginxd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid } reload() { echo -n $"Reloading $prog: " #kill -HUP `cat ${nginx_pid}` killproc $nginxd -HUP RETVAL=$? echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) stop start ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|reload|status|help}" exit 1 esac exit $RETVAL
保存退出
chmod 775 /etc/rc.d/init.d/nginx #賦予文件執行權限 chkconfig --level 012345 nginx on #設置開機啟動
service nginx start
5、其他


