iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0

nginx

nginx只要寫好設定檔就能幫我們處理好反向代理,我們可以用來處理subdomain映射到不同port的需求

現在什麼都要包在docker裡,nginx當然也不例外,把image拉下來

docker pull nginx:latest

在config建立nginx資料夾,創建nginx.conf寫入

server {

  listen	80;
  server_name dcreater.com;
  location / {
    proxy_pass http://127.0.0.1:8000;
  }

}

server {

  listen	80;
  server_name account.dcreater.com;
  location / {
    proxy_pass http://127.0.0.1:8001;
  }

}

server {

  listen	80;
  server_name asset.dcreater.com;

  location / {
    proxy_pass http://127.0.0.1:8002;
  }
}

解釋:

  • listen 監聽的port
  • server_name 對應的網址
  • location / {} 所有路徑
  • proxy_pass 導向的網址
    舉例來說 asset.dcreater.com:80會被轉到127.0.0.1:8002

nginx設定檔預設是放在/etc/nginx/conf.d/default.conf,我們用-v把我們的設定檔掛載上去

docker run -d -v `pwd`/config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf -p 80:80 nginx

現在不需要打port也能連上對應的server了

log

我們已經在go裡處理過log了,不過在nginx也能設定log幫助開發時debug,修改設定檔

log_format logdata $Host | $request_uri;

server {

  listen	80;
  server_name dcreater.com;
  location / {
    resolver 127.0.0.11;
    proxy_pass http://app:8000;
  }

  access_log /var/log/nginx/access.log logdata;
  error_log /var/log/nginx/error.log;

}

server {

  listen	80;
  server_name account.dcreater.com;
  location / {
    proxy_pass http://app:8001;
  }

}

server {

  listen	80;
  server_name asset.dcreater.com;
  location / {
    proxy_pass http://app:8002;
  }

}

解釋:

  • log_format logdata $Host | $request_uri; 定義一個log格式名叫"logdata",他會輸出host與request的網址
  • access_log /var/log/nginx/access.log logdata; 沒出錯會以"logdata"的格式紀錄在/var/log/nginx/access.log中
  • error_log /var/log/nginx/error.log; 如果有錯誤,錯誤訊息會紀錄在/var/log/nginx/error.log中

記得要放log的資料夾掛載到/var/log/nginx

我們目前還沒有icon,所以也可以在nginx裡處理,這裡簡單帶過,關掉log就好

location = /favicon.ico {
	access_log off;
	error_log off;
}

總結

簡單帶過nginx代理,明天來說CORS

目前的工作環境

.
├── app
│   ├── apperr
│   │   ├── error.go
│   │   └── handle.go
│   ├── common
│   │   └── cookie.go
│   ├── config
│   │   ├── app
│   │   │   ├── app.yaml
│   │   │   └── error.yaml
│   │   └── nginx
│   │       └── nginx.conf
│   ├── database
│   │   ├── auth.go
│   │   ├── connect.go
│   │   ├── error.go
│   │   ├── main.go
│   │   └── scheme.go
│   ├── go.mod
│   ├── go.sum
│   ├── log
│   │   ├── logger.go
│   │   └── logging.go
│   ├── main.go
│   ├── middleware
│   │   ├── auth.go
│   │   ├── error.go
│   │   └── log.go
│   ├── router
│   │   ├── account.go
│   │   ├── asset.go
│   │   ├── host_switch.go
│   │   └── main.go
│   ├── serve
│   │   ├── account.go
│   │   ├── asset.go
│   │   ├── auth.go
│   │   ├── main.go
│   │   └── main_test.go
│   ├── setting
│   │   └── setting.go
│   ├── util
│   │   ├── debug
│   │   │   ├── stack.go
│   │   │   └── stack_test.go
│   │   ├── file
│   │   │   └── file.go
│   │   ├── hash
│   │   │   ├── hash.go
│   │   │   └── hash_test.go
│   │   └── random
│   │       └── random.go
│   └── view
│       ├── css
│       ├── html
│       │   ├── component
│       │   │   ├── blogContainer.html
│       │   │   ├── blogList.html
│       │   │   ├── editor.html
│       │   │   ├── navigation.html
│       │   │   └── signContainer.html
│       │   └── meta
│       │       ├── head.html
│       │       └── index.html
│       └── js
│           ├── account.js
│           ├── editor.js
│           ├── main.js
│           ├── owner.js
│           └── sign.js
└── database
    └── maindata

上一篇
Day19 線上編輯器
下一篇
Day21 跨域請求
系列文
從coding到上線-打造自己的blog系統31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言