Nginx是一個高併發,高性能的服務器,能夠進行反向代理以及網站的負載均衡。這些功能的運用都在配置文件中,也就是Nginx安裝目錄下的conf/nginx.conf。css
1. 先來看下Nginx默認的配置文件以及說明:html
#user nobody;
#----------------------------------------------
# user用來配置使用的用戶和組,默認是沒有進行配置的:
# 以下配置表示配置aries這個用戶以及aries這個用戶組:
# user aries aries
#----------------------------------------------
worker_processes 1;
#----------------------------------------------
# worker_processes 用來配置Nginx開啓的進程數,
# 通常配置等於cpu的核數。
#----------------------------------------------
#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;
#---------------------------------------------
# error_log 全局錯誤日誌配置,後面跟生成的
# 志文件的位置,默認在Nginx的logs
# 文件夾中,以及日誌級別。
# [ debug | info | notice | warn | error | crit ] #---------------------------------------------
#pid logs/nginx.pid; #--------------------------------------------- # pid 當Nginx啓動時會生成一個nginx.pid的文件,
# 裏面存放的是Nginx主線程的id號。
#---------------------------------------------
#工做模式與鏈接數上限
events {
use epoll; worker_connections 1024; #配置Nginx單個進程容許的最大鏈接數。 } #設定http服務器 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; #-----------------------------------------------------------------------
# log_format 配置日誌格式,後面跟日誌格式的名稱和配置的格式,參數是Nginx中
# 一些內置的屬性。
# access_log 配置日誌的存放位置,以及後面跟日誌打印格式內容。
# ----------------------------------------------------------------------
sendfile on; # 開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件 #tcp_nopush on; # 防止網絡阻塞 #keepalive_timeout 0; keepalive_timeout 65; #gzip on;
# 配置開啓gzip壓縮
#虛擬主機的配置 server { listen 80;
# 監聽端口
server_name localhost; # 監聽主機名稱或者ip
#charset koi8-r; # 默認編碼
#access_log logs/host.access.log main; # 日誌
location / { root html; index index.html index.htm; }
#-------------------------------------------------
# 配置的訪問位置,默認是html目錄下的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 html; } }
「http」表示配置的http協議的請求,裏面能夠配置多臺server(虛擬主機),基本的配置格式以下:linux
...... event{ ...... } http{ ..... server { ...... } server { ...... } }
2. 下面配置負載均衡:nginx
#user nobody; worker_processes 1; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; log_format mystyle '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; upstream mycomputers { #upstream的負載均衡,weight是權重,能夠根據機器配置定義權重;weigth參數表示權值,權值越大被分配到的概率越大;down表示當前主機不可用。 server 192.168.137.111:80 weight=2; server 192.168.137.114:80 weight=2 ; server 192.168.137.113:80 weight=2 down; } server { listen 80; server_name localhost; location / { proxy_pass http://mycomputers; # 將請求按照權重分配給上面配置的服務器 proxy_set_header X-UserRealIP-For $remote_addr; # 由於用戶請求服務,先到Nginx因此在服務端若是在服務端直接過去請求IP獲得的是Nginx的主機,因此在這裏去出用戶的真實IP,設置在請求頭中,服務端才能夠獲取用戶的真實IP。 } access_log logs/access.log mystyle; } }
3. 反向代理配置 tomcat
server {
listen 80; server_name localhost; location / { proxy_pass http://192.168.137.114:8080; #代理的內部IP服務器
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr; } access_log logs/access.log mystyle; }
4. 動靜分離配置bash
server{ listen 80; server_name localhost; #本地動靜分離反向代理配置 #全部jsp的頁面均交由tomcat或其餘服務器處理 location ~ \.(jsp|jspx|do)?$ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #全部靜態文件由nginx直接讀取不通過tomcat或resin location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${ expires 15d; } location ~ .*\.(js|css)?${ expires 1h; } }
5. Nginx日誌的切割服務器
a 寫以下腳本存放到 /usr/local/nginx/sbin目錄下命名nginx_cut_log.sh, 做用是暫停nginx服務並備份日誌文件,而後重啓。網絡
#!/bin/bash BASE_PATH=/usr/local/nginx LOGS_PATH=${BASE_PATH}/logs LOGS_PATH_BAK=${LOGS_PATH}/logs_bak BAK_TIME=`/bin/date -d yesterday +%Y%m%d` $BASE_PATH/sbin/nginx -s stop mv $LOGS_PATH/access.log $LOGS_PATH_BAK/access_$BAK_TIME.log $BASE_PATH/sbin/nginx
給全部用戶添加執行權限: chmod a+x nginx_cut_log.sh 併發
b 輸入: crontab -eapp
插入以下代碼: 00 00 * * * sh /usr/local/nginx/nginx_cut_log.sh
此操做是讓linux系統天天晚上12點整執行nginx_cut_log.sh腳本進行日誌切割備份。
測試配置: */1 * * * * sh /usr/local/nginx/sbin/nginx_cut_log.sh 每分鐘執行一次
BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`
效果以下:
以上都只是最基本的配置,還有其餘各類細緻的配置屬性,推薦《nginx 實戰》進行系統的瞭解和學習。