author:咔咔php
wechat:fangkangfkcss
我這裏複製一份最初始的nginx.conf配置文件html
user 設置nginx服務的系統使用用戶 (通常狀況下是處於註釋狀態)linux
worker_processes 工做進程數(通常跟cpu核數相同便可)nginx
error_log nginx的錯誤日誌web
pid nginx服務啓動時候pid 後端
event 每一個進程容許最大的鏈接數(通常10000左右)tomcat
2 #user nobody; 3 worker_processes 1; 4 5 #error_log logs/error.log; 6 #error_log logs/error.log notice; 7 #error_log logs/error.log info; 8 9 #pid logs/nginx.pid; 10 11 12 events { 13 worker_connections 1024; 14 } 15 16 17 http { 18 include mime.types; 19 default_type application/octet-stream; 20 21 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 22 # '$status $body_bytes_sent "$http_referer" ' 23 # '"$http_user_agent" "$http_x_forwarded_for"'; 24 25 #access_log logs/access.log main; 26 27 sendfile on; 28 #tcp_nopush on; 29 30 #keepalive_timeout 0; 31 keepalive_timeout 65; 32 33 #gzip on; 34 35 server { 36 listen 80; 37 server_name localhost; 38 39 #charset koi8-r; 40 41 #access_log logs/host.access.log main; 42 43 location / { 44 root html; 45 index index.html index.htm; 46 } 47 48 #error_page 404 /404.html; 49 50 # redirect server error pages to the static page /50x.html 51 # 52 error_page 500 502 503 504 /50x.html; 53 location = /50x.html { 54 root html; 55 } 56 57 # proxy the PHP scripts to Apache listening on 127.0.0.1:80 58 # 59 #location ~ \.php$ { 60 # proxy_pass http://127.0.0.1; 61 #} 62 63 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 64 # 65 location ~ \.php$ { 66 root html; 67 fastcgi_pass 127.0.0.1:9000; 68 fastcgi_index index.php; 69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 70 include fastcgi_params; 71 } 72 75 # 76 #location ~ /\.ht { 77 # deny all; 78 #} 79 } 80 81 82 # another virtual host using mix of IP-, name-, and port-based configuration 83 # 84 #server { 33 #gzip on; 36 listen 80; 37 server_name localhost; 38 39 #charset koi8-r; 40 41 #access_log logs/host.access.log main; 42 43 location / { 44 root html; 45 index index.html index.htm; 46 } 47 48 #error_page 404 /404.html; 49 50 # redirect server error pages to the static page /50x.html 51 # 52 error_page 500 502 503 504 /50x.html; 53 location = /50x.html { 54 root html; 55 } 56 57 # proxy the PHP scripts to Apache listening on 127.0.0.1:80 58 # 59 #location ~ \.php$ { 60 # proxy_pass http://127.0.0.1; 61 #} 62 63 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 64 # 65 location ~ \.php$ { 66 root html; 67 fastcgi_pass 127.0.0.1:9000; 68 fastcgi_index index.php; 69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 70 include fastcgi_params; 71 } 72 73 # deny access to .htaccess files, if Apache's document root 74 # concurs with nginx's one 75 # 76 #location ~ /\.ht { 77 # deny all; 78 #} 79 } 80 81 82 # another virtual host using mix of IP-, name-, and port-based configuration 83 # 84 #server { 85 # listen 8000; 86 # listen somename:8080; 87 # server_name somename alias another.alias; 88 89 # location / { 90 # root html; 91 # index index.html index.htm; 92 # } 93 #} 94 95 96 # HTTPS server 97 # 98 #server { 99 # listen 443 ssl; 100 # server_name localhost; 101 102 # ssl_certificate cert.pem; 103 # ssl_certificate_key cert.key; 104 105 # ssl_session_cache shared:SSL:1m; 106 # ssl_session_timeout 5m; 107 108 # ssl_ciphers HIGH:!aNULL:!MD5; 109 # ssl_prefer_server_ciphers on; 110 111 # location / { 112 # root html; 113 # index index.html index.htm; 114 # } 115 #} 116 117 include vhosts/*.conf;
下來就是咱們最重要的一部分,那就是咱們的默認配置語法,這塊的代碼咱們抽離出來服務器
這裏咱們主要來解釋server這一層,、session
listen這是端口
server_name這個你得域名,或者二級域名
root這個放置的是你得項目訪問目錄 :例如TP5來講,這裏就能夠放置127.0.0.1/tp5/public/
下面這個location /這個是將項目項目路徑中的index.php去除掉
1 server { 2 listen 8081; 3 server_name 域名地址; 4 index index.html index.htm index.php; 5 root 項目訪問路徑; 6 location / { 7 rewrite ^/$/index.php last; 8 rewrite ^/(?!index\.php|robots\.txt|static|uploads)(.*)$ /index.php/$1 last; 9 } 10 location ~ \.php($|/) { 11 12 fastcgi_pass 127.0.0.1:9000; 13 fastcgi_index index.php; 14 fastcgi_split_path_info ^(.+\.php)(.*)$; 15 fastcgi_param PATH_INFO $fastcgi_path_info; 16 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 17 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; 18 include fastcgi_params; 19 } 20 21 if (!-e $request_filename) { 22 rewrite ^/(.*)$ /index.php/$1 last; 23 break; 24 } 25 access_log off; 26 }
對於location的詳解
location = / {精確匹配,必須是127.0.0.1/ #規則A } location = /login {精確匹配,必須是127.0.0.1/login #規則B } location ^~ /static/ {非精確匹配,而且不區分大小寫,好比127.0.0.1/static/js. #規則C } location ~ \.(gif|jpg|png|js|css)$ {區分大小寫,以gif,jpg,js結尾 #規則D } location ~* \.png$ {不區分大小寫,匹配.png結尾的 #規則E } location !~ \.xhtml$ {區分大小寫,匹配不已.xhtml結尾的 #規則F } location !~* \.xhtml$ { #規則G } location / {什麼均可以 #規則H }
那麼產生的效果以下:
訪問根目錄/, 好比http://localhost/ 將匹配規則A
訪問 http://localhost/login 將匹配規則B,http://localhost/register 則匹配規則H
訪問 http://localhost/static/a.html 將匹配規則C
訪問 http://localhost/a.gif, http://localhost/b.jpg 將匹配規則D和規則E,可是規則D順序優先,規則E不起做用, 而 http://localhost/static/c.png 則優先匹配到 規則C
訪問 http://localhost/a.PNG 則匹配規則E, 而不會匹配規則D,由於規則E不區分大小寫。
訪問 http://localhost/a.xhtml 不會匹配規則F和規則G,http://localhost/a.XHTML不會匹配規則G,由於不區分大小寫。規則F,規則G屬於排除法,符合匹配規則可是不會匹配到,因此想一想看實際應用中哪裏會用到。
訪問 http://localhost/category/id/1111 則最終匹配到規則H,由於以上規則都不匹配,這個時候應該是nginx轉發請求給後端應用服務器,好比FastCGI(php),tomcat(jsp),nginx做爲方向代理服務器存在。
因此實際使用中,我的以爲至少有三個匹配規則定義,以下:
#這裏是直接轉發給後端應用服務器了,也能夠是一個靜態首頁
# 第一個必選規則
location = / {
proxy_pass http:
//tomcat
:8080
/index
}
# 第二個必選規則是處理靜態文件請求,這是nginx做爲http服務器的強項
# 有兩種配置模式,目錄匹配或後綴匹配,任選其一或搭配使用
location ^~
/static/
{
root
/webroot/static/
;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root
/webroot/res/
;
}
#第三個規則就是通用規則,用來轉發動態請求到後端應用服務器
#非靜態文件請求就默認是動態請求,本身根據實際把握
#畢竟目前的一些框架的流行,帶.php,.jsp後綴的狀況不多了
location / {
proxy_pass http:
//tomcat
:8080/
}
#直接匹配網站根,經過域名訪問網站首頁比較頻繁,使用這個會加速處理,官網如是說。
#這裏是直接轉發給後端應用服務器了,也能夠是一個靜態首頁
# 第一個必選規則
location = / {
proxy_pass http:
//tomcat
:8080
/index
}
# 第二個必選規則是處理靜態文件請求,這是nginx做爲http服務器的強項
# 有兩種配置模式,目錄匹配或後綴匹配,任選其一或搭配使用
location ^~
/static/
{
root
/webroot/static/
;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root
/webroot/res/
;
}
#第三個規則就是通用規則,用來轉發動態請求到後端應用服務器
#非靜態文件請求就默認是動態請求,本身根據實際把握
#畢竟目前的一些框架的流行,帶.php,.jsp後綴的狀況不多了
location / {
proxy_pass http:
//tomcat
:8080/
}
未試驗過的其餘信息:
3、ReWrite語法 last – 基本上都用這個Flag。 break – 停止Rewirte,不在繼續匹配 redirect – 返回臨時重定向的HTTP狀態302 permanent – 返回永久重定向的HTTP狀態301 一、下面是能夠用來判斷的表達式: -f和!-f用來判斷是否存在文件 -d和!-d用來判斷是否存在目錄 -e和!-e用來判斷是否存在文件或目錄 -x和!-x用來判斷文件是否可執行 二、下面是能夠用做判斷的全局變量 例:http://localhost:88/test1/test2/test.php $host:localhost $server_port:88 $request_uri:http://localhost:88/test1/test2/test.php $document_uri:/test1/test2/test.php $document_root:D:\nginx/html $request_filename:D:\nginx/html/test1/test2/test.php 4、Redirect語法 server { listen 80; server_name start.igrow.cn; index index.html index.php; root html; if ($http_host !~ 「^star\.igrow\.cn$" { rewrite ^(.*) http://star.igrow.cn$1 redirect; } } 5、防盜鏈location ~* \.(gif|jpg|swf)$ { valid_referers none blocked start.igrow.cn sta.igrow.cn; if ($invalid_referer) { rewrite ^/ http://$host/logo.png; } } 6、根據文件類型設置過時時間 location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ { if (-f $request_filename) { expires 1h; break; } } 7、禁止訪問某個目錄 location ~* \.(txt|doc)${ root /data/www/wwwroot/linuxtone/test; deny all; }