<video id="h99qi"><ins id="h99qi"><span id="h99qi"></span></ins></video>

        <var id="h99qi"><td id="h99qi"></td></var>
        1. <acronym id="h99qi"></acronym>
          <wbr id="h99qi"><code id="h99qi"><span id="h99qi"></span></code></wbr>

          1. <var id="h99qi"><th id="h99qi"></th></var>
            0712-2888027 189-8648-0214
            微信公眾號

            孝感風信網絡科技有限公司微信公眾號

            當前位置:主頁 > 技術支持 > Linux > Nginx中基于User-Agent的Rewrite實例

            Nginx中基于User-Agent的Rewrite實例

            時間:2024-01-23來源:風信官網 點擊: 861次

            一般通過User-Agent來判斷,從網上抄一抄,那些列出的都不錯,我的配置里加上了java、curl和Wget,方便調試和其它內部項目的 抓取。因為現在很多手機網關沒有發送User-Agent,所以大部分手機發送的User-Agent到了網關就被過濾掉了,相當于是空值。經過抽樣調 查,User-Agent為空且為手機用戶比例比較大。有部分User-Agent為空的是一些蜘蛛或垃圾程序的造訪,這些垃圾流量并不那么重要。希望手 機網關將來有相應的標準,不要發送空的User-Agent,就是發送一個字母也好啊。如果應用有一個獨立域名,也未必要做手機判斷。譬如新浪有獨立域名 且深入人心,那它做不做跳轉無關緊要。nginx配置用窮舉方式羅列各類手機User-Agent并把空User-Agent也轉到手機應用里,非這些情 況,則跳到幫助頁面。

            set $ismob 0;
            if ( $http_user_agent ~ "^((.*MIDP.*)|(.*WAP.*)|(.*UP.Browser.*)|(.*Smartphone.*)|(.*Obigo.*)|(.*Mobile.*)|(.*AU.Browser.*)|(.*wxd.Mms.*)|(.*WxdB.Browser.*)|(.*CLDC.*)|(.*UP.Link.*)|(.*KM.Browser.*)|(.*UCWEB.*)|(.*SEMC-Browser.*)|(.*Mini.*)|(.*Symbian.*)|(.*Palm.*)|(.*Nokia.*)|(.*Panasonic.*)|(.*MOT-.*)|(.*SonyEricsson.*)|(.*NEC-.*)|(.*Alcatel.*)|(.*Ericsson.*)|(.*BENQ.*)|(.*BenQ.*)|(.*Amoisonic.*)|(.*Amoi-.*)|(.*Capitel.*)|(.*PHILIPS.*)|(.*SAMSUNG.*)|(.*Lenovo.*)|(.*Mitsu.*)|(.*Motorola.*)|(.*SHARP.*)|(.*WAPPER.*)|(.*LG-.*)|(.*LG/.*)|(.*EG900.*)|(.*CECT.*)|(.*Compal.*)|(.*kejian.*)|(.*Bird.*)|(.*BIRD.*)|(.*G900/V1.0.*)|(.*Arima.*)|(.*CTL.*)|(.*TDG.*)|(.*Daxian.*)|(.*DAXIAN.*)|(.*DBTEL.*)|(.*Eastcom.*)|(.*EASTCOM.*)|(.*PANTECH.*)|(.*Dopod.*)|(.*Haier.*)|(.*HAIER.*)|(.*KONKA.*)|(.*KEJIAN.*)|(.*LENOVO.*)|(.*Soutec.*)|(.*SOUTEC.*)|(.*SAGEM.*)|(.*SEC-.*)|(.*SED-.*)|(.*EMOL-.*)|(.*INNO55.*)|(.*ZTE.*)|(.*iPhone.*)|(.*Android.*)|(.*Windows CE.*)|(Wget.*)|(java.*)|(curl.*)|(Opera.*))$" )
            {
            set $ismob 1;
            proxy_pass http://blog.slogra.com;
            }
            if ( $http_user_agent ~ ^$ )
            {
            set $ismob 1;
            proxy_pass http://blog.slogra.com;
            }
            if ( $ismob = 0 )
            {
            rewrite "^.*$" http://help.slogra.com/ permanent;
            }

            2、Content-Type

            手機瀏覽器和普通電腦訪問頁面有所不同,絕大多數手機不支持text/html這種Content-Type格式。在web服務方面,除了要做出合 適手機瀏覽的頁面,另外一個重要的事情就是要把Content-Type弄對了。一般手機使用的是text/vnd.wap.wml和 application/xhtml+xml,聽說text/vnd.wap.wml是老式手機專用,application/xhtml+xml是3g 標準指定的Content-Type,另外charset需要指明為UTF-8。

            所以Content-Type就應像如下:

            Content-Type: application/xhtml+xml; charset=UTF-8
            

            這樣就對了。

            對于動態頁面,Content-Type可以在程序里設定。

            譬如php

            header("Content-Type: application/xhtml+xml; charset=UTF-8")

            jsp的話,把頂頭的page改了就好

            動態程序里的設定,到了nginx上默認會繼承,所以不用太多考慮。nginx要做的一個是靜態頁面,另一個是302跳轉。

            靜態頁面的Content-Type改起來不麻煩,修改mime.types:

            application/xhtml+xml                 html htm shtml;
            application/xhtml+xml                 xml;
            

            把需要的擴展名對應的類型改一改就好了。然后在nginx.conf里指定charset UTF-8。

            麻煩的是301和302跳轉,nginx中使用rewrite的redirect和permanent跳轉的時候,Content-Type怎么改 都會是text/html,使用add_header,Content-Type變成了兩行,沒能達成目的。用代理到動態程序固然行,但性能和穩定性又成 了問題。最后查閱了nginx源碼,發現這個text/html是寫死的……

            唉,第一次修改c代碼:

            我調試的這個nginx是0.7.30版的,文件:

            vi ./src/http/ngx_http_special_response.c
            
            568 //r->headers_out.content_type_len = sizeof("text/html") - 1;
            569 //r->headers_out.content_type.len = sizeof("text/html") - 1;
            570 //r->headers_out.content_type.data = (u_char *) "text/html";
            

            把568 569 570這三行代碼注釋掉,就可以讓nginx跳轉時不發送Content-Type,我發現在電腦的IE/FF瀏覽器上沒有Content-Type也能正常跳轉。

            當然,為了嚴謹一些,寫上Content-Type吧,現在可以用add_header定義:

            add_header Content-Type "text/html";
            

            手機的就是:

            add_header Content-Type "application/xhtml+xml";
            
            熱門關鍵詞: Nginx User-Agent Rewrite實例
            欄目列表
            推薦內容
            熱點內容
            展開
            亚洲精品在线视频_18禁无码毛片精品久久久久久_精品熟妇无码av免费久久_午夜福利片