Nginx(唸法是engine-X)是一個俄國人開發的HttpServer,跟Apache
有類似的作用,都是可以用來當作一台伺服器或是一個服務的架構上的第一線,在那邊可以做reverse proxy
,轉址
,load balance
...等等很多事。
試想看看,我們的server現在只有一台,之後我們也會為它綁定網域(domain)
,雖然現在我們只有要寫部落格,但是之後我們可能會在這台Server上放node.JS的後端程式,JAVA的後端程式...等等,我們必須要有一個類似分派器(dispatcher)
那樣的東西來幫我們分派我們所建構出來各式各樣的程式,但是對外又只對外開放一個窗口,這個窗口在這邊就是Nginx
。
千言不如一圖,簡單來說就是像下面這樣:
我們讓Nginx
監聽server上HTTP
跟HTTPS
各自的預設port號,每個request進來到我們的server,不在網址上輸入port號的情況下,全部會被Nginx
接起來,再由我們寫在Nginx
的設定檔
來設定什麼樣的情況下,該導去哪個程式。
之後我們也會為我們的server申請SSL證書
,讓別人連我們的server都是走HTTPS連線
,那這個SSL證書
會放在哪裡呢?看到這裡就已經有答案了吧,沒錯,既然Nginx
是我們的Server的第一道關卡,那我們的HTTPS當然也就會跟它有關係,透過Nginx
幫我們轉址,我們的server上的所有服務別人都可以透過HTTPS
連線進來,再由Nginx
幫我們分派(dispatch)。
CentOS7
,不同的OS,安裝方法可能會有點不一樣。yum
是CentOS上的依賴管理工具。/etc/yum.repos.d
這個資料夾底下,創一個叫nginx.repo
的檔案,yum
會根據這個檔案裡的內容來幫我們下載 安裝Nginx
時會用到的所有東西sudo vi /etc/yum.repos.d/nginx.repo
在這個檔案裡貼上底下這些內容,然後:x
離開。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum
幫我們下載並安裝nginx
sudo yum install nginx
sudo systemctl start nginx
HTTP
跟 HTTPS
,CentOS7上內建的防火牆已經變成firewalld
而不是iptables
,所以要注意底下的操作都是針對firewalld
的
依序執行這三條指令,代表將firewalld
底下的public區開放http
(80),與https
(443),然後重啟firewalld
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
sudo systemctl enable firewalld
Nginx
,作為一個daemon
,讓它會在OS底下常駐。sudo systemctl enable nginx
###指定我們想呈現的頁面
/etc/nginx/conf.d/default.conf
/etc
底下sudo vi /etc/nginx/conf.d/default.conf
location /
server {
....省略
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
...省略
}
location
是Nginx設定檔裡的一個指示(directive),後面的/
代表root route,也就是如果網址是輸入http://您的VPS主機的IP/
這樣的狀況下,會顯示什麼頁面,root
指的是資料夾路徑,
index
設定著那個資料夾底下的哪個檔案要當作目標頁面。
Server上的/usr/share/nginx/html/index.html
就是我們剛剛看到的那個Nginx預設的歡迎頁面,所以我們只要把這個地方改成我們想要放的html檔案的位置就可以呈現出我們想要呈現的頁面了。
755
。/usr
或/opt
底下;
結尾。 如果/etc/nginx/conf.d/default.conf
裡,設定有錯誤,比如說 少分號, 大括號沒有成對, 關鍵字打錯....都會讓Nginx無法重新啟動,還好Nginx有提供我們一個指令,能幫助我們檢查設定檔是否正確:
sudo nginx -t
修改完設定後,要請Nginx重新讀取設定檔,新的設定才能生效。
sudo systemctl reload nginx
...什麼,你說看不到?那就查查Nginx的error log吧:
把log印在console上:
sudo cat /var/log/nginx/error.log
或是讓它持續更新:
sudo tail -f /var/log/nginx/error.log
按下ctrl
+c
即可停止。
一頁一頁看:
less /var/log/nginx/error.log
按下G
(shift+g)可跳到最尾端,u
往上一頁,d
往下一頁, q
離開