最近由於升級服務並且涉及到域名的更改,架構也同時進行升級。
首先碰到的一個問題,用戶在輸入老的域名比如www.abc.com,雖然我在DNS上做了CNAME, www IN CNAME www.cba.com.
但是用戶在輸入www.abc.com后在流覽器地址欄中還是原來的www.abc.com,雖然也能正常訪問新網站,但是這樣用戶體驗并不特別好。
所以在用戶輸入www.abc.com按回車后直接在流覽器地址欄中變為www.cba.com。這樣應該是讓用戶更接受新的域名。在這之前我一般都是通過程序文件來執行的,但是這裡都是JSP
文件,對於這個實在不擅長了,所以想直接用nginx來進行實現了。結果還真是成了。
在nginx的location部份添加以下內容就可以了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| if ( $host ~* (.*).(abc).(com)) { set $domain $1; rewrite ^(.*) http: ``` 解釋一下 (.*)表示任何二級域名,abc.com表示原來的域名。.表示轉移為.這個標點符號。 set $domain $1, 這個$domain表示是二級域名的變量,$1表示abc.com後面接著的地址。rewrite部份就十分好理解了。需要更進一步學習就只能看[http: 由於使用nginx作為代理轉發器,所以對nginx的upstream和proxy也更多了瞭解。在upsteam中我們可以設置多個機器的不同權重以及失效的時間。但是在實際測試中發現,由於後端機器不夠穩定,出現404或者503,502這種情況,這個時候Nginx也會轉發到這個機器上,這樣用戶體驗會非常不好。 放狗找了下,還真給找到了解決方法。 在location部份加上 ```c proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; ``` 這樣一句。這樣後端一台機器出現500,503,404等錯誤的時候也就會 轉發到其他機器上了。這樣用戶體驗就會更好一點。 nginx還有一個需要手動添加的模塊NginxHttpUpstreamFairModule,這個需要自己編譯的時候通過--add-module=來手動添加進來。這個模塊的作用其實可以把用戶的請求發送到後 端負載最輕的機器上。只需要在upstream中這樣修改就行: ```c upstream www { fair; server 10.2.9.99:9090 weight=1; server 10.2.8.227:8080 weight=5; }
|