nginx是一個高性能http服務器和反向代理web服務器,淘寶還在基礎上開發了tengine。
nginx是一個master進程與多個work進程進行工做,master進程負責管理work進行,work進程負責接收具體客戶請求進行工做,worker_processes是設置work進程數量,通常work進程數量是根據cpu數量來設置,能夠綁定具體cpu工做。worker_connectons來設置每一個進程支持的最大鏈接數,在操做系統中咱們要設置limit得系統打開文件最大數。
下面是nginx源碼的目錄結構:
.
├── auto 自動檢測系統環境以及編譯相關的腳本
│ ├── cc 關於編譯器相關的編譯選項的檢測腳本
│ ├── lib nginx編譯所須要的一些庫的檢測腳本
│ ├── os 與平臺相關的一些系統參數與系統調用相關的檢測
│ └── types 與數據類型相關的一些輔助腳本
├── conf 存放默認配置文件,在make install後,會拷貝到安裝目錄中去
├── contrib 存放一些實用工具,如geo配置生成工具(geo2nginx.pl)
├── html 存放默認的網頁文件,在make install後,會拷貝到安裝目錄中去
├── man nginx的man手冊
└── src 存放nginx的源代碼
├── core nginx的核心源代碼,包括經常使用數據結構的定義,以及nginx初始化運行的核心代碼如main函數
├── event 對系統事件處理機制的封裝,以及定時器的實現相關代碼
│ └── modules 不一樣事件處理方式的模塊化,如select、poll、epoll、kqueue等
├── http nginx做爲http服務器相關的代碼
│ └── modules 包含http的各類功能模塊
├── mail nginx做爲郵件代理服務器相關的代碼
├── misc 一些輔助代碼,測試c++頭的兼容性,以及對google_perftools的支持
└── os 主要是對各類不一樣體系統結構所提供的系統函數的封裝,對外提供統一的系統調用接口
nginx.conf中的配置信息,根據其邏輯上的意義,對它們進行了分類,也就是分紅了多個做用域,或者稱之爲配置指令上下文。不一樣的做用域含有一個或者多個配置項。
當前nginx支持的幾個指令上下文:
main: nginx在運行時與具體業務功能(好比http服務或者email服務代理)無關的一些參數,好比工做進程數,運行的身份等。
http: 與提供http服務相關的一些配置參數。例如:是否使用keepalive啊,是否使用gzip進行壓縮等。
server: http服務上支持若干虛擬主機。每一個虛擬主機一個對應的server配置項,配置項裏面包含該虛擬主機相關的配置。
location: http服務中,某些特定的URL對應的一系列配置項。javascript
upstream模塊是一個代理模塊,upstream上游的意思,本地沒有的程序代碼能夠到其餘機器上訪問。php
upstream backend { server localhost:3100; server localhost:3101; } server { proxy_buffering on; proxy_buffer_size 1k; proxy_buffers 24 4k; proxy_busy_buffers_size 8k; proxy_max_temp_file_size 2048m; listen 8080; location / { # 忽略掉全部原始請求頭 proxy_pass_request_headers off; # 修改host頭 proxy_set_header Host $host; # 此處顯示server頭給客戶端 要不客戶端顯示的是代理服務器的server proxy_pass_header Server; proxy_pass http://backend; } }
ip_hash是負載均衡模式,把同一個IP地址得客戶端分配到同一臺服務器處理,能夠解決session不共享問題。
若是不加ip_hash,則用rr模型就是輪轉
這裏還能夠添加第三方模塊進行改變其餘的負載均衡模式css
如下代碼須要http{}字段內html
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;
level能夠是1--9,數字越大壓縮等級越高,響應越慢,cpu計算越高。java
代理php須要fastcgi模塊,代理Java用proxy
fastcgi相關參數nginx
fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; server { listen 80; server_name localhost; index index.html index.htm index.php; root /usr/local/webserver/nginx/html; location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } }
proxy相關參數c++
proxy_buffering on; proxy_buffer_size 1k; proxy_buffers 24 4k; proxy_busy_buffers_size 8k; proxy_max_temp_file_size 2048m; proxy_temp_file_write_size 32k; location / { proxy_pass http://example.com; }
日誌相關git
log_format main '$HTTP_X_REAL_IP - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" "$request_time"' '"$http_user_agent" $HTTP_X_Forwarded_For'; access_log /var/log/nginx/web2.access.log main;
use epoll; #事件驅動模型,events上下文,select|poll|kqueue|epoll|resig|/dev/poll|eventport,通常咱們都用epoll模式,異步非堵塞 charset gb2312; #支持utf-8,gbk等 deny 127.0.0.1; allow 172.18.5.54; #權限location上下文 keepalive_timeout 65; #長鏈接http,server,location上下文
listen 443; server_name baidu.com; ssl on; root /var/www/baidu.com; index index.html index.htm; ssl_certificate cert/214292799730473.pem; ssl_certificate_key cert/214292799730473.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on;
安裝nginx
nginx通常咱們都編譯源碼進行安裝
須要make和c環境
yum install -y gcc gcc-c++ make
若是用到rewrite重寫和gzip壓錯咱們通常還須要安裝pcre,zlib
yum install -y prce-devel zlib openssl-devel
下載安裝包
wget http://nginx.org/download/nginx-1.6.2.tar.gz
解壓
tar zxvf nginx-1.6.2.tar.gz
進入安裝包目錄
cd nginx-1.6.2
編譯安裝
./configure make make install
查看nginx版本
/usr/local/nginx/sbin/nginx -v
檢查配置文件
/usr/local/nginx/sbin/nginx -t
啓動nginx
/usr/local/nginx/sbin/nginx
重載nginx配置文件
/usr/local/nginx/sbin/nginx -s reload
github
nginx比較好的功能是動態添加模塊,不用中止服務
下載要添加的模塊
git clone https://github.com/agentzh/echo-nginx-module
查看已編譯參數
/usr/local/nginx/sbin/nginx -V
從新編譯
./configure --add-module=/root/echo-nginx-module make
備份原二進制文件,拷貝新二進制文件到sbin目錄web
cp /usr/local/nginx/sbin/{nginx,nginx_bak} cp /root/nginx-1.6/objs/nginx /usr/local/nginx/sbin/nginx
檢查及平滑升級
/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload