nginx的配置文件默認在nginx程序安裝目錄的conf二級目錄下,主配置文件爲nginx.conf,假設您的nginx安裝在/usr/local/webserver/nginx/目錄下,那麼默認的主配置文件則爲/usr/local/webserver/nginx/nginx.conf,如下是我當時爲某保險公司搭建的nginx的配置示例(部分信息作了漂白)。javascript
user apache apache; worker_processes 4; error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; pid /usr/local/webserver/nginx/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buffer_size 128k; large_client_header_buffers 4 32k; client_max_body_size 300m; sendfile on; tcp_nopush on; keepalive_timeout 1800; tcp_nodelay on; fastcgi_connect_timeout 1800; fastcgi_send_timeout 1800; fastcgi_read_timeout 1800; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; client_body_buffer_size 512k; proxy_connect_timeout 5; proxy_read_timeout 1800; proxy_send_timeout 1800; proxy_buffer_size 128k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 512k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #add_header Content-Encoding gzip; #注:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區 proxy_temp_path logs/proxy_temp_dir; #設置Web緩存區名稱爲cache_one,內存緩存空間大小爲200MB,1天沒有被訪問的內容自動清除,硬盤緩存空間大小爲30GB。 proxy_cache_path logs/proxy_cache_dir levels=1:2 keys_zone=cache_one:10m inactive=1d max_size=10g; upstream xxx1_domain_cluster { ip_hash; server 9.0.1.11:9000; server 9.0.1.12:9000; server 9.0.1.13:9000; server 9.0.1.14:9000; } upstream xxx2_domain_cluster { ip_hash; server 9.0.1.11:9004; server 9.0.1.12:9004; server 9.0.1.13:9004; server 9.0.1.14:9004; } upstream xxx3_domain_cluster { ip_hash; server 9.0.1.11:9001; server 9.0.1.12:9001; server 9.0.1.13:9001; server 9.0.1.14:9001; } upstream xxx4_domain_cluster{ ip_hash; server 9.0.1.11:9002; server 9.0.1.12:9002; server 9.0.1.13:9002; server 9.0.1.14:9002; } upstream xxx5_domain_cluster{ ip_hash; server 9.0.1.11:9003; server 9.0.1.12:9003; server 9.0.1.13:9003; server 9.0.1.14:9003; } upstream xxx6_domain_cluster{ ip_hash; server 9.0.1.11:9005; server 9.0.1.12:9005; server 9.0.1.13:9005; server 9.0.1.14:9005; } upstream xxx7_domain_cluster{ ip_hash; server 9.0.1.11:9006; server 9.0.1.12:9006; server 9.0.1.13:9006; server 9.0.1.14:9006; } upstream xxx8_domain_cluster{ ip_hash; server 9.0.1.11:9099; server 9.0.1.12:9099; server 9.0.1.13:9099; server 9.0.1.14:9099; } upstream xxx9_domain_cluster{ ip_hash; server 9.0.1.11:9007; server 9.0.1.12:9007; server 9.0.1.13:9007; server 9.0.1.14:9007; } upstream xxx10_domain_cluster{ ip_hash; server 9.0.1.11:9008; server 9.0.1.12:9008; server 9.0.1.13:9008; server 9.0.1.14:9008; } upstream xxx11_domain_cluster{ ip_hash; server 9.0.1.11:8008; server 9.0.1.12:8008; server 9.0.1.13:8008; server 9.0.1.14:8008; } server { listen 80; server_name 9.0.1.11; index index.html Login.jsp index.jsp QueryCodeInputOverview.jsp; default_type 'text/html'; charset UTF-8; root /usr/local/webserver/nginx/html; location /xxx/ { charset gb2312; index broadcast.html; proxy_pass http://guoyuan_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ charset gb2312; #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://xxx1_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } location /undwrt/ { proxy_pass http://undwrt_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ if ($request_uri ~* ^9\.0\.1\.5(.*)$){ rewrite ^(.*)1.5(.*)/undwrt(.*)$ http://9.0.1.13/undwrt permanent; proxy_pass http://$http_host$request_uri; } proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://undwrt_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_undwrt_domain_cluster.log; } location /prpall/ { charset utf-8; proxy_pass http://prpall_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ charset utf-8; #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://prpall_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_prpall_domain_cluster.log; } location /account/ { proxy_pass http://account_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://account_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_account_domain_cluster.log; } location /payment/ { charset utf-8; proxy_pass http://payment_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ charset utf-8; #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://payment_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_payment_domain_cluster.log; } location /visa/ { proxy_pass http://other_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_visa_domain_cluster.log; } location /reins/ { proxy_pass http://other_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_reins_domain_cluster.log; } location /newclaim/ { if ($host ~* ^www\.gyic\.(.*?)$) { rewrite ^/(.*)$ http://www.gyic.com:9003/newclaim last; } charset GB2312; proxy_pass http://newclaim_domain_cluster; proxy_set_header Host $host; gzip on; gzip_min_length 1k; gzip_buffers 4 128k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; add_header Content-Encoding gzip; location ~(\.jsp)|(\.do)|(\.htm)|(\.html)~{ charset GBK; #if ($host ~* ^9\.0\.1\.(.*?)$) #{ #rewrite ^/(.*)$ http://9.0.1.13:9003/newclaim last; #} if ($host ~* ^www\.gyic\.(.*?)$) { rewrite ^/(.*)$ http://www.gyic.com:9003/newclaim last; } gzip on; gzip_min_length 1k; gzip_buffers 4 128k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; add_header Content-Encoding gzip; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://newclaim_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_newclaim_domain_cluster.log; } location /claim/ { if ($host ~* ^www\.gyic\.(.*?)$) { rewrite ^/(.*)$ http://www.gyic.com:9002/claim last; } charset GB2312; proxy_pass http://claim_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)|(\.htm)|(\.html)~{ charset GBK; if ($host ~* ^www\.gyic\.(.*?)$) { rewrite ^/(.*)$ http://www.gyic.com:9002/claim last; } proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://claim_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_claim_domain_cluster.log; } location /reserve/ { charset utf-8; if ($host ~* ^www\.xxxx\.(.*?)$) { rewrite ^/(.*)$ http://www.xxxx.com:9007/reserve last; } proxy_pass http://reserve_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ charset utf-8; if ($host ~* ^www\.gyic\.(.*?)$) { rewrite ^/(.*)$ http://www.xxxx.com:9007/reserve last; } #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://reserve_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_reserve_domain_cluster.log; } location /platform/ { charset utf-8; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ charset utf-8; #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_patform_domain_cluster.log; } location /newreport/ { charset UTF-8; proxy_pass http://newreport_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)|(\.html)~{ default_type 'text/html'; charset GB2312; index newreporthelp.html welcome.html; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://newreport_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_newreport_domain_cluster.log; } location /anareport/ { charset GB2312; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ charset GB2312; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_anareport_domain_cluster.log; } location /FXQ/ { proxy_pass http://other_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_FXQ_domain_cluster.log; } location /srs/ { proxy_pass http://other_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_srs_domain_cluster.log; } location /sales/ { #if ($host ~* ^www\.gyic\.(.*?)$) #{ #rewrite ^/(.*)$ http://www.xxxx.com/sales/common/Login.jsp break; #} #index Login.jsp proxy_pass http://other_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #if ($host ~* ^www\.gyic\.(.*?)$) #{ #rewrite ^/(.*)$ http://www.xxxx.com/sales/common/Login.jsp break; #} #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_sales_domain_cluster.log; } location /webapp/ { proxy_pass http://other_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_webapp_domain_cluster.log; } location /WebRoot/ { proxy_pass http://webroot_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #index index.jsp QueryCodeInputOverview.jsp QueryCodeInputOverviewResult.jsp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://webroot_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_webapp_domain_cluster.log; } location /nginxstatus { stub_status on; access_log off; allow all; } location / { #若是後端的服務器返回50二、50四、執行超時等錯誤,自動將請求轉發到upstream負載均衡池中的另外一臺服務器,實現故障轉移。 proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_cache cache_one; #對不一樣的HTTP狀態碼設置不一樣的緩存時間 proxy_cache_valid 200 304 12h; #以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內 proxy_cache_key $host$uri$is_args$args; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; #proxy_pass http://backend_server; proxy_pass http://xxx1_domain_cluster; #proxy_pass http://www.xxx.com; access_log logs/access_backend_server_log; expires 1d; } #用於清除緩存,假設一個URL爲http://192.168.8.42/test.txt,經過訪問http://192.168.8.42/purge/test.txt就能夠清除該URL的緩存。 location ~ /purge(/.*) { #設置只容許指定的IP或IP段才能夠清除URL緩存。 allow 127.0.0.1; allow 9.0.0.0/16; # deny all; proxy_cache_purge cache_one $host$1$is_args$args; } #擴展名以.php、.jsp、.cgi結尾的動態應用程序不緩存。 location ~ .*\.(php|cgi)?$ { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; #proxy_pass http://backend_server; } location /get/ { set $hostx ""; set $addrs ""; if ( $uri ~ "^/get/http./+([^/]+)/(.+)$") { set $hostx $1; set $addrs $2; } resolver 127.0.0.1; proxy_pass http://$hostx/$addrs; proxy_set_header referer "http://$hostx"; } access_log logs/access.log; } server { listen 9.0.1.5:9004; location /undwrt/ { #if ($host ~* ^9\.0\.1\.5\.(.*?)$){ #rewrite ^/(.*)$ http://9.0.1.13:9004/undwrt redirect; #} proxy_pass http://undwrt_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #if ($host ~* ^9\.0\.1\.5\.(.*?)$){ #rewrite ^/(.*)$ http://9.0.1.13:9004/undwrt redirect; #} proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://undwrt_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_undwrt1_domain_cluster.log; } } server { listen 9.0.1.5:9001; location /prpall/ { #if ($host ~* ^9\.0\.1\.5\.(.*?)$){ #rewrite ^/(.*)$ http://9.0.1.13:9001/prpall redirect; #} proxy_pass http://prpall_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ #if ($host ~* ^9\.0\.1\.5\.(.*?)$){ #rewrite ^/(.*)$ http://9.0.1.13:9001/prpall redirect; #} proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://prpall_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_prpall1_domain_cluster.log; } } #server #{ #listen www.xxx.com:9003; #location /newclaim/ { ##if ($host ~* ^www\.gyic\.com\(.*?)$) ##{ ##rewrite ^/(.*)$ http://9.0.1.14:9003/newclaim last; ##} #proxy_pass http://newclaim_domain_cluster; #proxy_set_header Host $host; #location ~(\.jsp)|(\.do)~{ #proxy_set_header X-Real-IP $remote_addr; #proxy_set_header Host $host; #proxy_pass http://newclaim_domain_cluster; #proxy_set_header Host $host; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #} #access_log logs/access_claim1_domain_cluster.log; #} #} server { listen 9.0.1.5:7001; location /reins/ { proxy_pass http://other_domain_cluster; proxy_set_header Host $host; location ~(\.jsp)|(\.do)~{ proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://other_domain_cluster; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/access_reins1_domain_cluster.log; } } }
從示例中能夠看出,nginx.conf的配置文件主要由如下幾部分構成:php
…… events {……} http{ server{……} server{……} }
虛擬主機使用的是特殊的軟硬件技術,他把一臺運行在因特網上的服務器主機分紅一臺臺「虛擬主機」,每臺虛擬主機均可以是一個獨立的網站,能夠具備獨立的域名,具備完整的Internet服務器功能,同一臺主機上的虛擬主機之間是徹底獨立的。從網站訪問者來看,每一臺虛擬主機和一臺獨立的主機徹底同樣。css
利用虛擬主機,不用爲每一個要運行的網站提供一臺單獨的nginx服務器或單獨運行一組nginx進程。虛擬主機提供了在同一臺服務器、同一組nginx進程上運行多個網站的功能。html
Nginx能夠配置多種類型的虛擬主機:一是基於IP的虛擬主機,二是基於域名的虛擬主機,三是基於端口的虛擬主機。這點與Apache一致。java
下面分別講解這三種虛擬主機的配置方法。node
UNIX、Linux、FreeBSD操做系統都容許添加IP別名。IP別名的概念很簡單:能夠在一塊物理網卡上綁定多個IP地址。這樣就可以在使用單一網卡的同一個服務器上運行多個基於IP的虛擬主機。設置IP別名也很是容易,只需配置系統上的網絡接口,讓他監聽額外的IP地址。在Linux/UNIX系統上,可使用標準的網絡配置工具(好比ifconfig和route命令)添加IP別名。nginx
如下是添加IP別名的示例:web
先用ifconfig查看該服務器的IP地址,下面這臺服務器有一塊物理網卡設備eth0和本地迴環設備lo,eth0的IP地址爲192.168.8.42,本地迴環lo的IP地址爲127.0.0.1。本地迴環表明設備的本地虛擬接口,因此默認被看作是永遠不會宕掉的接口,他的主要做用有兩個:一是測試本機的網絡配置,能ping通127.0.0.1說明本機的網卡和IP協議安裝都沒有問題;另外一個做用是某些Server/Client的應用程序在運行時須調用服務器上的資源,通常要指定SERVER的IP地址,但當該程序要在同一臺機器上運行且沒有別的Server時,就能夠把SERVER的資源裝在本機上,SERVER的IP地址設爲127.0.0.1,也能夠一樣運行。shell
若是要在eth0網卡設備上添加兩個IP別名192.168.8.43和192.168.8.44,能夠經過如下的ifconfig和route命令來進行:apache
/sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up /sbin/route add –host 192.168.8.43 dev eth0:1 /sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up /sbin/route add –host 192.168.8.44 dev eth0:2
這時,在執行ifconfig命令,就能夠看到eth0網卡設備上綁定了兩個IP別名。
這時候,從另一臺服務器ping 192.168.8.43 和 192.168.8.44兩個IP,若是可以PING通,則證實配置無誤。可是,經過ifconfig和route配置的IP別名在服務器重啓後會自動消失,不過能夠將這兩條ifconfig和route命令添加到/etc/rc.local文件中,讓系統開機時自動運行,如下是相關命令。
在文件末尾增長如下內容,而後保存便可:
/sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up /sbin/route add –host 192.168.8.43 dev eth0:1 /sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up /sbin/route add –host 192.168.8.44 dev eth0:2
下面開始配置基於IP的虛擬主機。不管是經過IP別名在一臺服務器上配置多個IP地址,仍是經過多塊網卡在服務器上配置多個IP地址,在NGINX中都能將其配置成爲基於IP的虛擬主機。
接下來在NGINX配置文件(nginx.conf)中,分別對192.168.8.4三、192.168.8.4四、192.168.8.45三個IP配置三個純靜態HTML支持的虛擬主機,如代碼:
http{ server{ listen 192.168.8.43:80; server_name 192.168.8.43; access_log logs/server1.access.log combined; location /{ #默認首頁文件,順序從左到右,若是找不到index.html文件,則查找index.htm文件做爲首頁文件 index index.html index.htm; root /data0/htdocs/server1; } …… }
從上面的配置文件能夠看出,一段server{……}就是一個虛擬主機,若是要配置多個虛擬主機,創建多段server{}配置便可,很是方便。監聽IP和端口也能夠不寫IP地址,只寫端口,把它配置成「listen 80」,則表示監聽該服務器上全部IP的80端口,可經過server_name區分不一樣的虛擬主機。
基於域名的虛擬主機是最多見的一種虛擬主機。只需配置你的DNS服務器,將每一個主機名映射到正確的IP地址,而後配置NGINX服務器,令其識別不一樣的主機名就能夠了。這種虛擬主機技術,使不少虛擬主機能夠共享同一個IP地址,有效解決了IP地址不足的問題。因此,若是沒有特殊要求使你必須配置一個基於IP的虛擬主機,最好仍是使用基於域名的虛擬主機。
接下來配置基於域名的虛擬主機。在如下的示例中,配置了三個虛擬主機,第一個虛擬主機表示對域名aaa.domain.com的訪問都由它來處理,第二個虛擬主機表示全部對域名bbb.otherdomain.com的訪問都由它來處理,第三個虛擬主機表示對域名www.domain.com、domain.com,以及除了aaa.domain.com以外的全部*.domain.com二級域名的訪問都由它來處理。每一個虛擬主機的網頁文件分別存放了不一樣的目錄中,每一個虛擬主機使用了不一樣的日誌文件來記錄訪問日誌,如代碼:
http { server { listen 80; server_name aaa.domain.com; access_log logs/aaa.domain.com.access.log combined; location / { index index.html index.htm; root /data0/htdocs/aaa.domain.com; } } server 80; server_name bbb.otherdomain.com; access_log logs/bbb.otherdomain.com.access.log combined; location / { index index.html index.htm; root /data0/htdocs/bbb.otherdomain.com; } } …… }
在上面的nginx虛擬主機配置中,已經使用了access_log進行了日誌記錄,這一節中,咱們將詳細介紹Nginx訪問日誌文件得配置。
與nginx日誌相關的指令主要有兩條,一條是log_format,用來設置日誌的格式,另一條是access_log,用來指定日誌文件得存放路徑、格式和緩存大小。兩條指令在nginx配置文件中的位置能夠在http{……}之間,也能夠在虛擬主機之間,即server{……}兩個大括號之間。
log_format指令用來設置日誌的記錄格式,它的語法以下:log_format name format [format …]
其中name 表示定義的格式名稱,format表示定義的格式樣式。log_format有一個默認的、無須設置的combined日誌格式設置,至關於Apache的combined日誌格式,其具體參數以下:
log_format combined ‘$remote_addr - $remote_user [$time_local]’ ‘」$request」 $status $body_bytes_sent ‘ ‘」$http_referer」 「$http_user_agent」’;
注意:log_format指令設置的name名稱在nginx配置文件中是不能重複的。
假設將nginx服務器做爲web服務器,位於負載均衡設備、Squid、Nginx反向代理以後,就不能獲取到客戶端的真實IP地址了。緣由是通過反向代理以後,因爲在客戶端和Web服務器之間增長了中間層,所以Web服務器沒法直接拿到客戶端的IP,經過$remote_addr變量拿到的將是反向代理服務器的IP地址。可是,反向代理服務器在轉發請求的HTTP頭信息中,能夠增長X-Formated-For信息,用以記錄原有的客戶端IP地址和原來客戶端請求的服務器地址。
這時候,就要用log_format指令來設置日誌格式,讓日誌記錄X-Forwarded-For信息中的IP地址,即客戶的真實IP。例如,建立一個名爲mylogformat的日誌格式,再用$http_x_forwarded_for變量記錄用戶的X-Forwarded-For IP地址:
log_format mylogformat ‘$http_x_forwarded_for - $remote_user [$time_local]’ ‘」$request」 $status $bodybytes_sent ‘ ‘」$http_referer」
在日誌變量中,變量$remote_addr和$http_x_forwarded_for用於記錄IP地址;$remote_user用於記錄遠程客戶端用戶名稱;$time_local用於記錄訪問時間與時區;$request用於記錄請求URL與HTTP協議;$status 用於記錄請求狀態,例如成功時狀態爲200,頁面找不到時狀態爲404;$body_bytes_sent用於記錄發送給客戶端的主體內容大小;$http_referer用於記錄是從哪一個頁面連接訪問過來的;$http_user_agent用於記錄客戶端瀏覽器的相關信息。
如下爲日誌範例:
124.42.4.194 - -[12/Mar/2012:02:18:23 +0800] 「GET / HTTP/1.1」 200 36179 「-」 Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 5.1 ;Mozilla/4.0 (compatible;MSIE 6.0;Windows NT 5.1;SV1);CIBA;.NET CLR 2.0.50727)」
生產環境中的服務器,用於訪問日誌文件增加速度很是快,日誌太大會嚴重影響服務器效率。同時,爲了方便對日誌進行分析計算,需要對日誌文件進行定時切割。定時切割的方式有按月、按天、按小時切割等。最經常使用的是按天切割。
Nginx不支持像Apache同樣使用cronolog來輪轉日誌,可是能夠採用如下方式來實現日誌文件得切割:
mv /data1/logs/access.log /data1/logs/20120418.log
kill -USR1 Nginx主進程號
首先經過mv 命令將日誌文件重命名爲/data1/logs/20120418.log,而後發送kill –USR1信號給NGINX的主進程號,讓Nginx從新生成一個新的日誌文件/data1/logs/access.log。若是nginx.conf配置文件中使用了」pid /usr/local/webserver/nginx/nginx.pid;」指令,指定了pid文件得存放路徑,咱們能夠經過cat 這個pid文件得到nginx的主進程號,命令以下:
kill –USR1 ‘cat /usr/local/webserver/nginx/nginx.pid’
若是想天天定時切割日誌,還須要藉助crontab,咱們能夠寫一個按天切割的日誌,按年、月份目錄存放日誌的shell腳本:
vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh,輸入如下內容並保存:
#!/sbin/bash #這個腳本須在天天的00:00運行 #nginx 日誌文件得存放路徑 logs_path = 「data1/logs/」 mkdir –p ${logs_path}$(date –d 「yesterday」 + 「%Y」)/$(date –d 「yesterday」 + 「%m」)/ mv ${logs_path}access.log ${logs_path}$(date –d 「yesterday」 + 「%Y」)/$(date –d 「yesterday」 +」%m」)/access_$(date –d 「yesterday」 +」%Y%m%d」).log kill –USR1 ‘cat /usr/local/webserver/nginx/nginx.pid’
配置Crontab天天凌晨00:00定時執行這個腳本:crontab –e
輸入如下內容:
00 00 * * * /sbin/bash /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
gzip(GNU-ZIP)是一種壓縮技術。通過gzip壓縮後的頁面大小能夠變爲原來的30%甚至更小。這樣,用戶瀏覽頁面的時候會快得多。gzip的壓縮頁面須要瀏覽器和服務器雙方都支持,實際上就是服務器端壓縮,傳到瀏覽器後瀏覽器解壓並解析。瀏覽器那裏咱們不用擔憂,由於IE、Firefox、Opera、谷歌Chrome等絕大多數瀏覽器都支持解析gzip過的頁面。
nginx的壓縮輸出由一組gzip壓縮指令來實現。咱們從示例入手,來學習gzip壓縮輸出。gzip壓縮輸出的相關指令位於http{……}兩個大括號之間:
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_com_level 2; gzip_types text/plain application/x-javascript text/css /application/xml; gzip_vary on;
瀏覽器緩存是爲了加速瀏覽,瀏覽器在用戶磁盤上對最近請求過的文檔進行存儲,當訪問者再次請求這個頁面時,瀏覽器就能夠從本地磁盤顯示文檔,這樣就能夠加速頁面的閱覽。緩存的方式節約了網絡的資源,提升了網絡的效率。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; }