nginx各種新技巧

最近由於升級服務並且涉及到域名的更改,架構也同時進行升級。
首先碰到的一個問題,用戶在輸入老的域名比如www.abc.com,雖然我在DNS上做了CNAME, www IN CNAME http://www.cba.com.
但是用戶在輸入www.abc.com后在流覽器地址欄中還是原來的www.abc.com,雖然也能正常訪問新網站,但是這樣用戶體驗并不特別好。
所以在用戶輸入www.abc.com按回車后直接在流覽器地址欄中變為www.cba.com。這樣應該是讓用戶更接受新的域名。在這之前我一般都是通過程序文件來執行的,但是這裡都是JSP

文件,對於這個實在不擅長了,所以想直接用nginx來進行實現了。結果還真是成了。
在nginx的location部份添加以下內容就可以了

                if ( $host ~* (.*)\.(abc)\.(com))
                {
                set $domain $1;
                rewrite ^(.*) http://$domain.cba.com$1 permanent;
                }

解釋一下 (.*)表示任何二級域名,abc.com表示原來的域名。\.表示轉移為.這個標點符號。 set $domain $1, 這個$domain表示是二級域名的變量,$1表示abc.com後面接著的地址。rewrite部份就十分好理解了。需要更進一步學習就只能看http://wiki.nginx.org/NginxHttpRewriteModule

由於使用nginx作為代理轉發器,所以對nginx的upstream和proxy也更多了瞭解。在upsteam中我們可以設置多個機器的不同權重以及失效的時間。但是在實際測試中發現,由於後端機器不夠穩定,出現404或者503,502這種情況,這個時候Nginx也會轉發到這個機器上,這樣用戶體驗會非常不好。
放狗找了下,還真給找到了解決方法。
在location部份加上

proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;

這樣一句。這樣後端一台機器出現500,503,404等錯誤的時候也就會

轉發到其他機器上了。這樣用戶體驗就會更好一點。

nginx還有一個需要手動添加的模塊NginxHttpUpstreamFairModule,這個需要自己編譯的時候通過–add-module=來手動添加進來。這個模塊的作用其實可以把用戶的請求發送到後

端負載最輕的機器上。只需要在upstream中這樣修改就行:

        upstream www  {
		fair;
                server 10.2.9.99:9090 weight=1;
                server 10.2.8.227:8080 weight=5;
        }

关于 Timo
XNIX SA & MYSQL DBA

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: