關於如何快速調教NGINX的幾點總結

關於如何快速調教Nginx的幾點總結

關於Nginx的好與壞,我以爲沒有必要去介紹了,在這裏主要分享一下我在實際的項目部署中是如何快速的調教Nginx的。其中分享的源碼你們能夠做爲模板代碼,根據自身項目的實際狀況,酌情使用。javascript

這裏簡單的說一說我爲何要寫這篇文章,網上有不少大而全的文章在介紹Nginx是什麼,如何入門等等,玩了不少的文字遊戲,反正我接觸Nginx的時候,去查閱文檔給個人是這種感受,大而全,可是很亂。這裏我要講的不是Nginx的理論知識,而是一些可以快速的應用到項目中的實際技巧。廢話就說這麼多,開始本次分享的主體。css

調教一:開啓GZIP,提升頁面加載速度

http:{
    ...
    
    gzip on;
    gzip_min_length 10;
    gzip_comp_level 4;
    gzip_disable "MSIE [1-10] \.";
    gzip_types text/plain appliaton/x-javascript text/css application/xml image/jpeg image/gif image/png image/svg+xml;
    
    ...
}
複製代碼
gzip on 開啓gzip壓縮功能
gzip_min_lenght 10 壓縮臨界值,大於10KB的文件才壓縮
gzip_com_level 4 設置壓縮級別[0-10],數字越大,壓縮比越好,但消耗的時間越長
gzip_desable "MSIE [1-10]." 對IE瀏覽器不採用壓縮,[1-10]表示瀏覽器版本範圍
gzip_types 須要進行文件壓縮的類型,根據自身狀況酌情添加

通常狀況下,關於gzip的配置,設置以上幾個參數就能夠了html

調教二:無www的域名跳轉到帶www的域名

server{
    listen 80;
    server_name http://youdomain.com;
    return 301 http://www.youdomain.com$request_uri; } 複製代碼

針對本身的域名,配置一個全局的server,對裸域名的請求進行轉發,注意要加上「$request_uri」java

網上有關這個問題提供了另一種解決辦法,代碼以下:nginx

server{
    listen 80;
    server_name www.youdomain.com;
    if ( $host !='www.youdomain.com'){ rewrite ^/(.*)$ http://www.youdomain.com/$1 permanent; } rewrite ^/(.*)$ http://$host$1 permanent;
}
複製代碼

我在本身的項目中使用第二種方式進行配置,貌似沒有生效,因此改成了第一種配置方式web

調教三:配置https

關於如何配置server(http)這裏再也不介紹,網上相關文檔不少,這裏主要分享如何在Nginx中配置HTTPS,配置代碼以下:apache

server{
    listen 443 ssl;
    server_name www.youdomain.com;
    access_log logs/com_youdomain_logs.log;
    
    ssl_certificate  c:/sslfile/cert.crt;
    ssl_certificate_key c:/sslfile/cert.key;
    
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    
    location /{
    	proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for; proxy_set_header Host $host;
        proxy_set_header    X-Forwarded-Proto   https;
        proxy_set_header    X-real-IP  $remote_addr; proxy_set_header X-Forwarded-proto $scheme;            
        proxy_connect_timeout   240;
        proxy_send_timeout    240;
        proxy_read_timeout    240;
        proxy_pass    http://localhost:8080;
        proxy_redirect ~^http://([^:]+)(:\d+)?(.*)$ https://$1$3; } } 複製代碼

這裏須要注意幾個地方:瀏覽器

  • 監聽的端口由原來的80或者其餘(一般是80端口)改成 443 ssl 。
  • ssl_certificate配置HTTPS證書放置的路徑,ssl_certificate_key 放置HTTPS證書的祕鑰路徑。
  • ssl_session_cache配置HTTPS的緩存,ssl_session_timeout配置HTTPS緩存的生命週期。
  • 在location配置中,proxy_set_header部分的代碼是一個固定用法,不進行介紹。
  • proxy_connect_timeout,proxy_send_timeout和proxy_read_timeout主要配置在HTTPS下創建請求鏈接、發送數據和讀取數據的時間上線(超時處理)
  • proxy_pass設置Nginx須要代理的請求對象,如http://localhost:8080 ,這裏須要web容器配置,在接下來會單獨介紹
  • proxy_redirect設置代理後的請求轉發重定向:~^http://([^:]+)(:\d+)?(.*)$ https://$1$3; 將http請求重定向到https上。

要實現https加密請求,還須要web容器的配合,在這裏以Apache Tomcat配置爲例進行介紹。緩存

調教三:開啓tomcat對https請求的支持

在上一小節中,咱們對server的代理作了以下的配置:tomcat

server{
    ...
    location /{
        ...
        proxy_pass http://localhost:8080;
        ...
    }
    ...
}
複製代碼

首先,咱們須要將tomcat的鏈接器(Connector)的端口設置爲8080,將轉發重定向的端口(redirectPort)和代理端口(proxyPort)設置爲443。具體的配置代碼以下:

...
<Connector prot="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" proxyPort="443"/>
...
複製代碼

而後,須要在Host配置中設置remoteIpHeaderprotocolHeaderprotocolHeaderHttpsValue這三個屬性的值,詳細配置以下:

...

	<Host name="localhost" appBase="webapps" ....>
		<Value className="org.apache.catalina.values.RemoteIpValue" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>
		...
        ...
        <Context docBase="" path="" reloadable="false"></Context>
	
	</Host>

...
複製代碼

以上就是就是Nginx+tomcat的組合方式開啓https請求的調教過程。

做者:譚朝紅
原文:關於如何快速調教NGINX的幾點總結

結束語

以上就是我在實際項目開發過程當中任務比較經常使用其重要的幾個調教點,但願本次分享可以幫到你。這次文章主要分享關於Nginx小而精的一些經常使用配置技巧,更多的配置如分佈式下一服多實例的配置我會單獨些一篇文章進行分享,今天的內容就到這裏結束了;再次感謝你的拜讀,拜拜~~

相關文章
相關標籤/搜索