nginx開啓文件目錄瀏覽功能(web上顯示目錄)php
1location / { 2 root /data/www/file //指定實際目錄絕對路徑; 3 autoindex on; //開啓目錄瀏覽功能; 4 autoindex_exact_size off; //關閉詳細文件大小統計,讓文件大小顯示MB,GB單位,默認爲b; 5 autoindex_localtime on; //開啓以服務器本地時區顯示文件修改日期! 6}
php-fpm配置css
1 location ~ \.php(.*)$ { 2 fastcgi_pass 127.0.0.1:9000; 3 fastcgi_read_timeout 7200; 4 fastcgi_index index.php; 5 fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; 6 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 7 fastcgi_param PATH_INFO $fastcgi_path_info; 8 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; 9 include fastcgi_params; 10 }
靜態資源讀取html
1 location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) { 2 #全部靜態文件直接讀取硬盤 3 root /var/lib/tomcat7/webapps/JieLiERP/WEB-INF ; 4 expires 30d; #緩存30天 5 }
gzip 壓縮nginx
1gzip on; #是否開啓gzip 2gzip_buffers 32 4k; #內存中緩衝幾塊 3gzip_min_length 1000; #最小壓縮長度 4gzip_comp_level 6; #壓縮級別[1-9](級別越高壓縮的越小,可是越浪費cpu) 5gzip_disable; #正則匹配UA什麼樣的uri不進行壓縮 6gzip_http_version 1.1|2.0; 開始壓縮htpp協議版本 7gzip_proxied #設置請求者代理服務器,該如何緩存內容 8gzip_types text/plain application/xml; #對哪些類型的文件用壓縮(圖片,mp3這類2進制文件壓縮率不高不必壓縮) 9gzip_vary on|off #是否傳輸壓縮標誌
1.激活所須要的網站的https獲取crt和key證書
2.在nginx配置文件中配置https證書web
將http訪問域名重定向爲https安全訪問算法
1server { 2 listen 80; 3 server_name www.shangbee.com shangbee.com; 4 #重定向shangbee.com到 www.shangbee.com 5 # if ( $host != 'www.shangbee.com' ) { 6 # rewrite ^/(.*)$ https://www.shangbee.com permanent; 7 # } 8 rewrite ^ https://$http_host$request_uri? permanent;#強制將HTTP重定向到HTTPS permanent永久重定向 9 10}
1server { 2 listen 443 ssl; 3 ssl_certificate /etc/nginx/ssl/nginx.crt; 4 ssl_certificate_key /etc/nginx/ssl/nginx.key; 5 keepalive_timeout 70; 6 server_name www.shangbee.com; 7 server_tokens off; 8 #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; 9 fastcgi_param HTTPS on; 10 fastcgi_param HTTP_SCHEME https; 11 #access_log /app/logs/nginx/mydomain_access.log; 12 #error_log /app/logs/nginx/mydomain_error.log; 13 set $root /data/htdocs/ether/public; 14 location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ 15 { 16 root $root; 17 } 18 location / { 19 root $root; 20 index index.html index.php; 21 if ( -f $request_filename) { 22 break; 23 } 24 if ( !-e $request_filename) { 25 rewrite ^(.*)$ /index.php/$1 last; 26 break; 27 } 28 } 29 location ~ .+\.php($|/) { 30 fastcgi_pass unix:/run/php/php7.0-fpm.sock; 31 fastcgi_split_path_info ^((?U).+.php)(/?.+)$; 32 fastcgi_param PATH_INFO $fastcgi_path_info; 33 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; 34 fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name; 35 include fastcgi_params; 36 } 37}
臨時重定向redirect,永久重定向permanent後端
301重定向是永久的重定向,搜索引擎在抓取新內容的同時也將舊的網址替換爲重定向以後的網址。瀏覽器
302跳轉是暫時的跳轉,搜索引擎會抓取新的內容而保留舊的網址。由於服務器返回302代碼,搜索引擎認爲新的網址只是暫時的。緩存
實施301後,新網址徹底繼承舊網址,舊網址的排名等徹底清零。tomcat
實施302後,對舊網址沒有影響,但新網址不會有排名。
302每次用戶請求都會訪問一次服務器,並返回給用戶,301用戶請求後將永久重定向緩存,再次請求直接在本地重定向不會通過服務器。
反向代理是負載均衡的一種方式
反向代理能夠實現負載均衡 可是負載均衡不必定經過反向代理的方式來實現
反向代理也能夠不作負載均衡 能夠作客戶端與web服務器之間的緩存服務器
squid varnish這些反向代理通常作緩存
nginx反向代理通常作負載均衡
負載均衡也能夠經過LVS非反向代理的方式來實現 經過ip和端口實現負載均衡
NGINX反向代理緩存
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器。
反向代理的做用
①保護網站安全:任何來自Internet的請求都必須先通過代理服務器。
簡單來講,就是咱們網站的全部的請求都要通過反向代理服務器,對反向代理服務器進行安全加固就能解決很大一部分的安全問題。
②經過配置緩存功能加速Web請求:能夠緩存真實Web服務器上的某些靜態資源,減輕真實Web服務器的負載壓力;
能夠在反向代理的服務器上緩存某些靜態資源,這樣的話在反向代理服務器上存在的資源就不用去web服務器上獲取,以減輕web服務器的壓力。
③實現負載均衡:充當負載均衡服務器均衡地分發請求,平衡集羣中各個服務器的負載壓力;
能夠經過反向代理服務器把請求分發到不一樣服務器,減輕服務器的壓力,還能防止網站某一臺服務器掛掉以後,網站就沒法訪問的問題,作到網站的高可用,減小事故的發生。
反向代理緩存設置
1、在反向代理服務器的配置文件中加入:
位置:
http段內
1proxy_temp_path /data/nginx-temp; #緩存臨時文件路徑 2proxy_cache_path /data/nginx-cache levels=1:2 keys_zone=nginx-cache:20m 3max_size=50m inactive=1m; #緩存保存的路徑
levels指定該緩存空間有兩層hash目錄,第一層目錄爲1個數字或者字母,第二層爲2個數字或者字母
keys_zone指的是緩存空間名稱。 20m 爲內存緩存空間大小
max_size指的是緩存文件能夠佔用的最大空間。
inactive指的是若是一個緩存文件多長時間不被訪問,就會被刪除。(天:d、秒:s、分:m)
•配置的demo
//設置動態服務器的代理 【處理PHP任務】
1upstream test { 2 #ip_hash; #[ 使用ip_hash分發 ] 3 server 192.168.1.254:81 weight=2 ; #[ 設置這個服務器的權重爲2 ] 4 server 192.168.1.254:82; 5}
//設置獲取靜態文件的代理
1upstream static{ 2 server 192.168.1.254:81 ; #[ 靜態服務器 ] 3}
設置緩存目錄
1proxy_temp_path /data/nginx-temp; #[temp的目錄] 2proxy_cache_path /data/nginx-cache levels=1:2 keys_zone=nginx-cache:20m max_size=50m inactive=1m;
[ 設置緩存的路徑爲 /data/nginx-cache 層級爲2級,第一級爲1個字幕第二個爲2個字母 緩存的空間名爲 nginx-cache,緩存的內存空間爲20M 最大空間爲50M 1分鐘內沒有訪問刪除這個緩存 ]
END
1server { 2 listen 80; 3 server_name _; 4 access_log logs/likang.default.access.log main; 5 error_log logs/error.log error; 6 root /var/www/html/likang/default;
設置反向代理
1location /{ 2 proxy_pass http://test; 3 proxy_set_header Host $host; 4 proxy_set_header X-Real-IP $remote_addr; 5 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 6 }
設置靜態圖片
1location ~.*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) { 2 #root /data/nginx-cache; #[ 圖片的根目錄 ] 3 proxy_redirect off; #[關閉跳轉] 4 proxy_set_header Host $host; #[ 設置header ] 5 proxy_cache nginx-cache; #[ 緩存的空間 -- 上邊定義的 ] 6 proxy_cache_valid 200 302 1h; #[ 不一樣http狀態緩存時間不一樣 ] 7 proxy_cache_valid 301 1d; 8 proxy_cache_valid any 1m; 9 proxy_ignore_headers Set-Cookie Cache-Control; 10 proxy_hide_header Cache-Control; 11 proxy_hide_header Set-Cookie; 12 expires 30d; #[告訴瀏覽器緩存有效期 -- 30天內能夠直接訪問瀏覽器緩存 ] 13 proxy_pass http://static; #[文件不存在去那裏獲取] 14 } 15}
解決不緩存的問題:
nginx不緩存緣由
默認狀況下,nginx是否緩存是由nginx緩存服務器與源服務器共同決定的, 緩存服務器須要嚴格遵照源服務器響應的header來決定是否緩存以及緩存的時常。header主要有以下:
Cache-control:no-cache、no-store
若是出現這兩值,nginx緩存服務器是絕對不會緩存的
Expires:1980-01-01
若是出現日期比當前時間早,也不會緩存。
解決不緩存方案
2.1 方法一:
修改程序或者源服務器web程序響應的header
2.2 方法二:
nginx代理直接加上以下一句:
1proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
或者:
1proxy_ignore_headers Set-Cookie Cache-Control; 2proxy_hide_header Cache-Control; 3proxy_hide_header Set-Cookie;
擴展:學習nginx的Proxy Cache指令
1 proxy_cache
語法:proxy_cache zone_name;
默認值:None
使用字段:http, server, location
設置一個緩存區域的名稱,一個相同的區域能夠在不一樣的地方使用。
在0.7.48後,緩存遵循後端的」Expires」, 「Cache-Control: no-cache」, 「Cache-Control: max-age=XXX」以及其餘等。然而,目前nginx會忽略一些緩存控制指令,如:」private」和」no-store」,一樣,nginx在緩存過程當中不會處理」Vary」頭,爲了確保一些私有數據不被全部的用戶看到,後端必須設置 「no-cache」或者」max-age=0″頭,或者proxy_cache_key包含用戶指定的數據如
2 proxy_cache_key
語法:proxy_cache_key line;
默認值:httpcookiexxx,在proxycachekey中使用一部分cookie的值能夠防止緩存私有數據,因此能夠分別指定location以便分開私有數據和公有數據。緩存指令依賴代理緩衝區(buffers),若是proxybuffers設置爲off,緩存不會生效。¨K40K語法:¨C2C默認值:schemeproxyostrequest_uri;
使用字段:http, server, location
指令指定了包含在緩存中的緩存關鍵字。
複製代碼 代碼以下:
1proxy_cache_key "$host$request_uri$cookie_user"; 2 3proxy_cache_key "$scheme$host$request_uri";
3 proxy_cache_path
語法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
默認值:None
使用字段:http
指令指定緩存的路徑和一些其餘參數,緩存的數據存儲在文件中。緩存的文件名和key爲代理URL的MD5 碼。levels參數指定緩存的子目錄數,例如:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
文件名相似於:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
全部活動的key和元數據存儲在共享的內存區域中,這個區域用keys_zone參數指定,若是在inactive參數指定的時間內緩存的數據沒有被請求則被刪除,默認inactive爲10分鐘。
cache manager進程控制磁盤的緩存大小,在max_size參數中定義,超過其大小後最少使用數據將被刪除。
區域的大小按照緩存頁面數的比例進行設置,一個頁面(文件)的元數據大小按照操做系統來定,FreeBSD/i386下爲64字節,FreeBSD/amd64下爲128字節,當區域滿了之後key將按照LRU(最近最少使用算法)進行處理。
proxy_cache_path和proxy_temp_path應該使用在相同的文件系統上。
4 proxy_cache_methods
語法:proxy_cache_methods [GET HEAD POST];
默認值:proxy_cache_methods GET HEAD;
使用字段:http, server, location
GET/HEAD用來裝飾語句,即你沒法禁用GET/HEAD即便你只使用下列語句設置:
proxy_cache_methods POST;
5 proxy_cache_min_uses
語法:proxy_cache_min_uses the_number;
默認值:proxy_cache_min_uses 1;
使用字段:http, server, location
多少次的查詢後應答將被緩存,默認1。
6 proxy_cache_valid
語法:proxy_cache_valid reply_code [reply_code ...] time;
默認值:None
使用字段:http, server, location
爲不一樣的應答設置不一樣的緩存時間,例如:
複製代碼 代碼以下:
1 proxy_cache_valid 200 302 10m; 2 proxy_cache_valid 404 1m; 3 proxy_cache_valid 5m; 4 proxy_cache_valid 200 302 10m; 5 proxy_cache_valid 301 1h; 6 proxy_cache_valid any 1m;
7 proxy_cache_use_stale
爲了防止緩存失效(在多個線程同時更新本地緩存時),你能夠指定’updating’
參數,它將保證只有一個線程去更新緩存,而且在這個線程更新緩存的過程當中其餘的線程只會響應當前緩存中的過時版本。
代碼及configure配置:
在ngx_http_proxy_module.c裏面定義了每一個指令的鉤子(即callback),它們在讀取配置文件時會被調用。在configure的時候只須要把「HTTP_CACHE」
設置爲YES(能夠找到auto/options裏面HTTP_CACHE那行)。「proxy_cache_purge」指令須要下載nginx add-ons裏面的「Cache Purge」
模塊,並在configure的時候用"--add-module="
來加載代碼。