個人覺得:名字翻譯成《自動化 nginx 反向代理配置》更為貼切。
【一句話總結】
介紹了如何建構一個能夠自動化配置 nginx 反向代理的方式。即将後端服務的部署與前端 nginx 的配置更改進行解耦。
【知識點】
對于 api 的使用者來說所有操作都是在同一個 url 空間裡進行的,而實際上是根據 url 中不同的頂級“段”來進行路由的。
自動化配置的流程:當增加處理新“段”的 server 後,将投遞一條 rabbitmq 消息(包含 claim、ipaddress 和 portnumber 資訊),然後通過一個定制的元件 proxyautomation 消費 rabbitmq 消息,之後通過 ssh 和 scp 重新 nginx 的配置,并促使配置的重新加載。
ssh.net 上有相關庫。
<a href="http://my.oschina.net/moooofly/blog/228884#">?</a>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<code>...</code>
<code> </code><code>http {</code>
<code> </code><code>include </code><code>/etc/nginx/mime</code><code>.types;</code>
<code> </code><code>default_type application</code><code>/octet-stream</code><code>; </code>
<code> </code><code>log_format main </code><code>'$remote_addr - $remote_user [$time_local] "$request" '</code>
<code> </code><code>'$status $body_bytes_sent "$http_referer" '</code>
<code> </code><code>'"$http_user_agent" "$http_x_forwarded_for"'</code><code>; </code>
<code> </code><code>access_log </code><code>/var/log/nginx/access</code><code>.log main;</code>
<code> </code><code>sendfile on;</code>
<code> </code><code>keepalive_timeout 65;</code>
<code> </code>
<code> </code><code>include</code><code>/etc/nginx/conf</code><code>.d/*.conf;</code>
<code> </code><code>}</code>
下面這段配置是為了處理 host 為 api.example.com 端口為 80 的請求的。
<code>include</code><code>/etc/nginx/conf</code><code>.d</code><code>/api</code><code>.example.com.conf.d</code><code>/upstream</code><code>.*.conf; </code>
<code>server {</code>
<code> </code><code>listen 80;</code>
<code> </code><code>server_name api.example.com;</code>
<code> </code><code>include </code><code>/etc/nginx/conf</code><code>.d</code><code>/api</code><code>.example.com.conf.d</code><code>/location</code><code>.*.conf;</code>
<code> </code><code>location / {</code>
<code> </code><code>root </code><code>/usr/share/nginx/api</code><code>.example.com;</code>
<code> </code><code>index index.html index.htm;</code>
<code> </code><code>}</code>
定制的 proxyautomation 元件就是通過将新 location.*.conf 檔案放入 /etc/nginx/conf.d/api.example.com.conf.d/ 目錄來實作添加新的 api “段” 的功能的。
例如需要增加 stock “段”,則要建立如下配置檔案
<code>location</code><code>/stock/</code> <code>{</code>
<code> </code><code>proxy_pass http:</code><code>//stock</code><code>;</code>
<code>}</code>
這個配置就是讓 nginx 将所有發向 api.example.com/stock/ 的請求代理到名字為 stock 的 upstream server 。這就用到了上面第一處 include 指令的配置内容(upstream.*.conf)。是以,我們定制的 proxyautomation 元件同樣需要将建立的 upstream.stock.conf 檔案放入 /etc/nginx/conf.d/api.example.com.conf.d/ 目錄。upstream.stock.conf 檔案内容可能如下
<code>upstream stock {</code>
<code> </code><code>server 10.0.0.23:8001;</code>
<code> </code><code>server 10.0.0.23:8002;</code>
這段配置用于将發向 api.example.com/stock/ 的請求以 round-robin 的方式發到兩個位址上。