返回
Featured image of post Nginx 教學

Nginx 教學

一款強大且簡單設定的 Web Server

是一款常見的 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預設的格式會以httpserverlocation去做巢狀描述:

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資料檔。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus