天天看點

【整理】自動的 Nginx 反向代理配置

個人覺得:名字翻譯成《自動化 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 的方式發到兩個位址上。 

繼續閱讀