BloggerAds

2015年10月17日 星期六

[筆記] 變更預設使用 Xcode server/wiki/網站 的順序 Part 2

很久以前寫過一篇 「變更預設使用 Xcode server/wiki/網站 的順序」文章,介紹了怎樣把 Xcode server、wiki、網站的顯示順序變更,但好景不常,它…沒用了!

照著文章不管我怎麼調整,Xcode server 依舊先顯示了出來,所以只好來研究一下新版的伺服器做了什麼好事!畢竟都是基於 Apache 設定修改出來的,應該可以找到以前熟悉的東西!

首先找到網頁伺服器的設定目錄 "/Library/Server/Web/Config/apache2",看了一下目錄裡的檔案,有一個 ReadMe.txt 文字檔,先打開來快速瀏覽一下,Apple 也沒偷懶,這文件有重新寫成他們修改後的說明,裡面看到 Apache 的主要設定檔已改成 "httpd_server_app.conf" 了,所以問題看起來要在這裡面看看了!

先快速瀏覽一次檔案,直覺上看起來就是如果網頁伺服器服務打開,那伺服器就會把 "/Library/Server/Web/Config/apache2/sites/" 裡面的設定檔讀進來,如果網頁伺服器服務關閉,那伺服器就只需要把 "virtual_host_global.conf"、"0000_127.0.0.1_34580_.conf"、"0000_127.0.0.1_34543_.conf" 三個設定檔照順序讀進來。

先來來看看 "/Library/Server/Web/Config/apache2/sites/" 這個目錄裡面到底賣什麼藥,裡面的東西如下:
server:sites user$ ls -al
total 128
drwxr-xr-x  18 root  wheel   612 10 16 23:48 .
drwxr-xr-x  40 root  wheel  1360 10 16 23:50 ..
-rw-r--r--@  1 root  wheel  1583 10 16 23:48 0000_127.0.0.1_34543_.conf
-rw-r--r--   1 root  wheel  2256 10  4 08:14 0000_127.0.0.1_34543_.conf.default
-rw-r--r--@  1 root  wheel  1583 10 16 23:35 0000_127.0.0.1_34543_.conf.prev
-rw-r--r--@  1 root  wheel  1254 10 16 23:48 0000_127.0.0.1_34580_.conf
-rw-r--r--   1 root  wheel  2392 10  4 08:14 0000_127.0.0.1_34580_.conf.default
-rw-r--r--@  1 root  wheel  1254 10 16 23:35 0000_127.0.0.1_34580_.conf.prev
-rw-r--r--   1 root  wheel  2172 10  4  2014 0000_any_443_.conf.default
-rw-r--r--   1 root  wheel  5778 10  4 08:14 0000_any_443_.conf.orig
-rw-r--r--@  1 root  wheel  5778  9 10 09:11 0000_any_443_.conf.prev
-rw-r--r--   1 root  wheel  2307 10  4  2014 0000_any_80_.conf.default
-rw-r--r--   1 root  wheel  3978 10  4 08:14 0000_any_80_.conf.orig
-rw-r--r--@  1 root  wheel  3978  9 10 09:11 0000_any_80_.conf.prev
-rw-r--r--@  1 root  wheel   282 10 16 23:48 virtual_host_global.conf
-rw-r--r--   1 root  wheel   301 10  4 08:14 virtual_host_global.conf.default
-rw-r--r--   1 root  wheel   301 10  4 08:14 virtual_host_global.conf.orig
-rw-r--r--@  1 root  wheel   282 10 16 23:35 virtual_host_global.conf.prev

server:sites user$ ls -l *.conf
-rw-r--r--@ 1 root  wheel  1583 10 16 23:48 0000_127.0.0.1_34543_.conf
-rw-r--r--@ 1 root  wheel  1254 10 16 23:48 0000_127.0.0.1_34580_.conf
-rw-r--r--@ 1 root  wheel   282 10 16 23:48 virtual_host_global.conf
的確,修改一下網頁伺服器「索引檔案」實驗一下,每次修改索引檔案順序的時候,這三個檔案都會有新的版本。 看看檔案內容中,DirectoryIndex 真的有修改成我修改的順序,但是怎麼還是有問題?再次仔細看看內容,埠號好像怪怪的,埠號34543 似乎對應了埠號 443 的變更,埠號 34580 對應了埠號 80 的變更!怎麼會變得這麼奇怪呢?那其他的檔案有用嗎?上網拜一下谷歌大神,原來其他的檔案是舊版本使用的,從 Server 5.0.4 之後,就做了這個修改!那...只好來看看伺服器在什麼時候做了轉址的事了!

根據搜尋到的參考文章[1],知道有個 "/Library/Server/Web/Config/Proxy/apache_serviceproxy.conf" 需要關心一下,打開檔案來看看,在 "virtualhost" 裡面,看到它又參考了 "/Library/Server/Web/Config/Proxy/apache_serviceproxy_slash_default*.conf",而對應的目錄裡面只有 "apache_serviceproxy_slash_default.conf" 這個檔案,一打開它就知道應該是找到了!因為可以看到下面這些設定:
RewriteCond %{ENV:DEFAULT_SITE} =YES
RewriteCond %{ENV:WEBDAV_REQUEST} =NO
RewriteCond %{ENV:XCODE} -f
RewriteCond %{ENV:WIKI} -f
RewriteCond %{ENV:WEB} -f
RewriteRule "^/$"  "%{ENV:proto}://%{SERVER_NAME}/xcode" [R,L,E=nocache:1]

RewriteCond %{ENV:DEFAULT_SITE} =YES
RewriteCond %{ENV:WEBDAV_REQUEST} =NO
RewriteCond %{ENV:WIKI} -f
RewriteCond %{ENV:XCODE} -f
RewriteRule "^/$"  "%{ENV:proto}://%{SERVER_NAME}/wiki" [R,L,E=nocache:1]

RewriteCond %{ENV:DEFAULT_SITE} =YES
RewriteCond %{ENV:WEBDAV_REQUEST} =NO
RewriteCond %{ENV:XCODE} -f
RewriteCond %{ENV:WEB} -f
RewriteRule "^/$"  "%{ENV:proto}://%{SERVER_NAME}/xcode" [R,L,E=nocache:1]

RewriteCond %{ENV:DEFAULT_SITE} =YES
RewriteCond %{ENV:WEBDAV_REQUEST} =NO
RewriteCond %{ENV:WIKI} -f
RewriteCond %{ENV:WEB} -f
RewriteRule "^/$"  "%{ENV:proto}://%{SERVER_NAME}/wiki" [R,L,E=nocache:1]

RewriteCond %{ENV:DEFAULT_SITE} =YES
RewriteCond %{ENV:WEBDAV_REQUEST} =NO
RewriteCond %{ENV:WIKI} -f
RewriteRule "^/$"  "%{ENV:proto}://%{SERVER_NAME}/wiki" [R,L,E=nocache:1]

RewriteCond %{ENV:DEFAULT_SITE} =YES
RewriteCond %{ENV:WEBDAV_REQUEST} =NO
RewriteCond %{ENV:XCODE} -f
RewriteRule "^/$"  "%{ENV:proto}://%{SERVER_NAME}/xcode" [R,L,E=nocache:1]
這裡簡單來說就是它會根據目前的伺服器設定來決定要重新導向到什麼位置去,由於我啟用了 web + wiki + Xcode Server,所以如果瀏覽的網址上沒有指定位置或檔案,會直接導向至 Xcode Server!看起來這裡就是我的問題所在了!

另外從 "apache_serviceproxy_slash_default.conf" 這個檔案的時間來看,這個檔案似乎不會被更改,因為一直維持在我更新 Server 程式的時間,但未來 Apple 會不會再更新修改它,這就不掛保證了!

將 "RewriteRule "^/$" "%{ENV:proto}://%{SERVER_NAME}/xcode" [R,L,E=nocache:1]" 修改成 "RewriteRule "^/$" "%{ENV:proto}://%{SERVER_NAME}/" [R,L,E=nocache:1]" 之後重新開機完成修改(對!是重新開機,重開網頁伺服器看起來沒辦法~殘念!)

來來回回加上寫這個記錄也花了兩小時,Apple 真是讓人家傷腦筋阿!

Reference:
[1] Server 5.0.4 Default Ports Changes