# Nginx 遊玩紀錄 ## 基本概念參考文章 - [Medium -- Nginx 基本概念1](https://medium.com/starbugs/web-server-nginx-1-cf5188459108) - [Medium -- Nginx 基本概念2](https://medium.com/starbugs/web-server-nginx-2-bc41c6268646) ## 透過Linux電腦安裝 ```bash sudo apt-get update sudo apt-get install nginx ``` ## Nginx 設定 - 設定檔案通常在 **`/etc/nginx`** 內  - 可以在 conf.d 內新增任何的 .conf 檔案來套用設定  - 如果有任何設定檔案變動,需要重新啟動nginx載入設定 ```bash systemctl reload nginx # 也可用 restart ``` - 檢查Nginx是否有監聽特定的port ```bash netstat -tulpn | grep LISTEN ``` ## 1.普通API轉發 ### Nginx 範例設定 ```nginx server { listen 8888; listen [::]:8888; server_name GoogleProxy; # 定義domain的位置,如果location跟這邊不同,代理轉發就可能出問題 proxy_set_header Host www.google.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 轉發代理到google頁面 location / { proxy_pass http://www.google.com.tw; } # 轉發代理到搜尋Youtube的頁面 location /YT { proxy_pass http://www.google.com.tw/search?q=Youtube; } # 透過rewrite,把query後面的字串帶入搜尋字串到google的params location /query { rewrite ^/query/(.*)$ http://www.google.com.tw/search?q=$1 redirect; # proxy_pass http://www.google.com.tw/search?q=; } # 不同 domain 就無法轉發代理 location /t { proxy_pass http://www.youtube.com/; } } ``` ## 2.輸出靜態檔案 ### 建立靜態資源 - 可以嘗試在 **`/home/{user}/html`** 下建立 **`index.html`** 如下 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> Hello world!!! </body> </html> ``` ### Nginx 範例設定 ```nginx server { listen 51000; listen [::]:51000; server_name haha; root /home/test/html; # domain 為本機 proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # will show hello world location /static { try_files $uri /$uri /index.html; } } ``` ### `http://127.0.0.1:51000/static`  ## 3. Nginx也可以直接return喔 ### Nginx 範例設定 ```nginx server { listen 51000; listen [::]:51000; server_name haha; root /home/test/html; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 可以直接回傳,來檢測Nginx是否有效,或是觀察某些變數定義 location /test { return 200 $http_host; # 指定回傳的類型,不指定會變成靜態檔案,瀏覽器就會出現下載的內容 # 詳細可以觀察mime.types的檔案,裡面有所有支援的檔案類型 default_type text/plain; } location /test2 { # 如果想要多個變數,用單引號包起來就可以 return 200 '$http_host $remote_addr $proxy_add_x_forwarded_for'; default_type text/plain; } } ``` ### `http://127.0.0.1:51000/test`  ### `http://127.0.0.1:51000/test2`  ## 4. 重新導向並操作url的params ## 5. 如果有錯,可以怎麼看 ``` nginx -t ``` ## 6. Nginx 代理到另一個 Nginx的靜態資料 會產生mime type遺失的問題
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up