這裡介紹如何在 CentOS Linux 中變更 Nginx 網頁伺服器的傾聽連接埠,使用非標準的連接埠進行網頁開發與測試。
標準的網頁伺服器會使用 80
或是 8080
作為傾聽連接埠,而在開發與測試系統或網站時,有時候會將測試用的網頁伺服器安裝在非標準的連接埠上,跟正式的網頁伺服器有所區隔。
server
中的 listen
參數來調整傾聽的連接埠。
server { # 自訂網頁伺服器連接埠 listen 8090 default_server; listen [::]:8090 default_server; # [略] }
而在 CentOS Linux 中,若直接將 Nginx 的傾聽連接埠改為非標準的連接埠的話,可能會出現 Permission denied
的錯誤訊息。
2018/10/29 10:40:26 [emerg] 20879#0: bind() to 0.0.0.0:8090 failed (13: Permission denied)
這個錯誤是來自於 SELinux 限制 HTTP 服務只能使用幾個標準的連接埠,避免惡意程式亂開服務,產生系統漏洞。
如果想要解決這個問題,可以使用 semanage
這個小工具,調整一下 SELinux 的設定。而使用前要先用 yum
安裝:
# 安裝 semanage(SELinux policy 管理工具)
sudo yum install policycoreutils-python
安裝好了 semanage
之後,可以先查看一下系統上目前允許 HTTP 服務使用的連接埠有哪些:
# 列出允許 HTTP 服務使用的連接埠 sudo semanage port -l | grep http_port_t
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
在預設的情況下,SELinux 只允許 HTTP 服務使用一些常見的連接埠,不果我們指定連接埠不在這個允許列表中,就會出現 Permission denied
的錯誤。
若要讓 HTTP 服務使用 8090
這個自訂的連接埠號,可以將這個連接埠號加入 http_port_t
列表中:
# 允許 HTTP 服務使用 8090 連接埠 sudo semanage port -a -t http_port_t -p tcp 8090
再檢查一次,確認 8090
有在允許使用的連接埠之內:
# 列出允許 HTTP 服務使用的連接埠 sudo semanage port -l | grep http_port_t
http_port_t tcp 8090, 80, 81, 443, 488, 8008, 8009, 8443, 9000
這樣就可以讓 Nginx 網頁伺服器正常使用 8090
這個連接埠了。
參考資料:serverfault