是一款常見的 Web Server,很常拿來和 Apache
比較,但是不管是記憶體佔用,且可大量並行使用,遠遠的超過 Apache
的各種知識,在Web Server中已經是個多人使用的一款架構。
安裝方式
Mac 安裝方式
brew install nginx
nginx 操作
# 啟動 Nginx
nginx
# 關閉 Nginx
nginx -s stop
# 重啟 Nginx
nginx -s reload
Homebrew版-核心文件位置
# Nginx 設定主檔
/usr/local/etc/nginx/nginx.conf
# 預設主機的配置
/usr/local/etc/nginx/conf.d/default.conf
# log文檔位置
/usr/local/var/log/nginx
編寫文件
這邊以基本的 HTML
作為教學
基礎樣貌會以這樣貌為主,通常我會以預設主機的配置去指定的HTML
default.conf
預設的格式會以http
、server
、location
去做巢狀描述:
http{
...
server{
...
location{
...
}
}
}
本地測試
快速啟動 http://localhost:80/default.conf
server{
listen 80;
server_name localhost;
location / {
# 實際的檔案位置
root /usr/share/nginx/html;
# 預設首頁檔名
index index.html index.htm;
}
# 網頁發生錯誤轉導頁面 處理
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
啟動 Nginx
nginx
Proxy 轉址服務
情境使用:
- 當我的路由指定頁面,我需要轉導去別的頁面。
- 當我是前後端分離的狀況下,我的 API 網址可能是不希望讓別人知道的網址。
案例由本地進行測試:
案例狀況 啟動一台服務位置為 127.0.0.1:3000
default.conf
server {
listen 80;
server_name localhost;
location /api {
proxy_pass 127.0.0.1:3000;
}
}
啟動 Nginx
nginx
訪問 http://localhost:80/api 就可以訪問到 127.0.0.1:3000 的應用服務
改寫 server name
如果要改寫server_name
要記得修改 host
需(root權限),檔案位置/etc/hosts
# 新增一條 網址名稱給本地主機認得
127.0.0.1 www.example.com
default.conf
server {
listen 80;
server_name www.example.com;
location /api {
proxy_pass 127.0.0.1:3000;
}
}
重啟 Nginx
nginx -s reload
訪問 http://www.example.com/api 就可以訪問到 127.0.0.1:3000 的應用服務
Load Balancer
應用服務如果通常只有一台主機,所以如果你訪問一台服務,有時候的IP不同,就是它是多台並行的狀態
所以 server 就有兩台服務:
192.168.0.1:3000 - 第一台 192.168.0.1 主機,Port號為3000
192.168.0.2:3000 - 第二台 192.168.0.2 主機,Port號為3000
192.168.0.3:3000 - 第二台 192.168.0.3 主機,Port號為3000
http {
upstream my_app {
server 192.168.0.1:3000;
server 192.168.0.2:3000;
server 192.168.0.3:3000;
}
server {
server_name localhost;
listen 80
location / {
proxy_pass http://my_app; # 指到設定的 upstream 及 protocol
}
}
}
這樣就會隨機的訪問到其中一台主機。
gzip
剛進入新的網站要讀取頁面時,通常會下載網站的資料,有些是原始檔案,所以一個個的檔案下載下來會很久,如果瀏覽器有支援讀取壓縮包的檔案可以加快的讀取檔案。
可以自定義取得想要的類型檔案
通常我會修改 Nginx 設定主檔
nginx.conf
# ... 略過
http {
# ... 略過
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
# ... 略過
}
這樣就可以使用瀏覽器解壓縮,讀取gzip
資料檔。