Express engine 学习笔记 - 工作在反向代理背后的 Express 设置
第22行的 express,返回的是一個 express Application 實例。
 
再看該實例的 set 方法:
 
app.set(name, value)
將設置名稱分配給值。 您可以存儲您想要的任何值,但某些名稱可用于配置服務器的行為。 這些特殊名稱列在應用程序設置表中。
為布爾屬性調用 app.set(‘foo’, true) 與調用 app.enable(‘foo’) 相同。 同樣,為布爾屬性調用 app.set(‘foo’, false) 與調用 app.disable(‘foo’) 相同。
使用 app.get() 檢索設置的值。
Express behind proxies
在反向代理后面運行 Express 應用程序時,某些 Express API 可能返回與預期不同的值。 為了對此進行調整,可以使用 trust proxy 應用程序設置來公開 Express API 中反向代理提供的信息。
最常見的問題是公開客戶端 IP 地址的 express API 可能會顯示反向代理的內部 IP 地址。這并不是我們期望的。
server.set('trust proxy', 'loopback');trust proxy 的屬性可以設置成以下幾種類型:
設置成 boolean
如果為 true,則客戶端的 IP 地址被理解為 X-Forwarded-For 標頭中最左側的條目。
如果為 false,則應用程序被理解為直接面向客戶端,并且客戶端的 IP 地址來自 req.socket.remoteAddress。 這是默認設置。
設置為 true 時,確保最后一個受信任的反向代理刪除/覆蓋以下所有 HTTP 標頭很重要:X-Forwarded-For、X-Forwarded-Host 和 X-Forwarded-Proto,否則的話,客戶可能為這幾個字段提供任何價值。
設置成 ip 地址
作為反向代理信任的 IP 地址、子網或一組 IP 地址和子網。 以下列表顯示了預配置的子網名稱:
- loopback - 127.0.0.1/8, ::1/128
 - linklocal - 169.254.0.0/16, fe80::/10
 - uniquelocal - 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7
 
一些例子:
app.set('trust proxy', 'loopback') // specify a single subnet app.set('trust proxy', 'loopback, 123.123.123.123') // specify a subnet and an address app.set('trust proxy', 'loopback, linklocal, uniquelocal') // specify multiple subnets as CSV app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal']) // specify multiple subnets as an array指定時,IP 地址或子網將被排除在地址確定過程之外,并且離應用服務器最近的不受信任的 IP 地址被確定為客戶端的 IP 地址。 這通過檢查 req.socket.remoteAddress 是否可信來工作。 如果是,則從右到左檢查 X-Forwarded-For 中的每個地址,直到第一個不可信地址。
啟用信任代理將產生以下影響:
-  
req.hostname 的值來自 X-Forwarded-Host 頭中設置的值,可以由客戶端或代理設置。
 -  
X-Forwarded-Proto 可以由反向代理設置來告訴應用程序是 https 還是 http 甚至是無效名稱。 該值由 req.protocol 反映。
 -  
req.ip 和 req.ips 值基于套接字地址和 X-Forwarded-For 標頭填充,從第一個不受信任的地址開始。
 
更多Jerry的原創文章,盡在:“汪子熙”:
 
總結
以上是生活随笔為你收集整理的Express engine 学习笔记 - 工作在反向代理背后的 Express 设置的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 现代 ABAP 编程语言中的正则表达式
 - 下一篇: 起居十大装修风水原则