[英]Configure Nginx to reverse proxy requests to backend server based on port number
我在端口8888、8088、8042和8890的一個ec2實例中運行了四個Web應用程序,其主機名為“ ip-10-176-225-83.us-west-2.compute.internal”。所有這些Web應用程序在HTTP上。
我們的安全團隊不允許打開從本地到AWS的http端口。 建議在同一VPC子實體中設置一個反向代理,該代理接受HTTPS請求,然后使用HTTP將其轉發到后端Web服務器。
我在同一子網中以主機名“ ip-10-176-225-84.us-west-2.compute.internal”創建了一個新實例,並安裝了Niginx Server。
我如何配置Nginx,使其如下所示
https://ip-10-176-225-84.us-west-2.compute.internal:8080致電http://ip-10-176-225-83.us-west-2.compute.internal: 8080並回復
其他端口相同
TL; DR:有多種方法可以完成您在此處尋找的內容。
堅持盡可能減少攻擊面的原則,除非絕對必要,否則通常最好不要將端口暴露給公共互聯網。 反向代理是完成此任務的絕佳方法。 通常,您希望所有后端Web應用通過端口443上的HTTPS進行反向代理,並且您可以訪問每個服務:
app1.example.com
和app2.example.com
, 或 example.com/app1
和example.com/app2
根據您選擇的方法,配置可能會有很大不同,前者方案有多個server
塊,后者則有location
塊。 無論哪種情況,我們都將使用upstream
和proxy_pass
指令。 我將給出這兩種情況的示例。
多主機
如果前端使用多個主機名(或多個端口),則需要為它們創建多個server
塊:
# Nginx reverse-proxy configuration
upstream app1 {
server 10.176.225.83:8888;
}
upstream app2 {
server 10.176.225.83:8088;
}
upstream app3 {
server 10.176.225.83:8042;
}
upstream app4 {
server 10.176.225.83:8890;
}
server {
listen 443 ssl;
server_name app1.example.com;
ssl_certificate_key /path/to/your/ssl-key.pem;
ssl_certificate /path/to/your/ssl-cert.pem;
location / {
proxy_pass http://app1;
}
}
server {
listen 443 ssl;
server_name app2.example.com;
ssl_certificate_key /path/to/your/ssl-key.pem;
ssl_certificate /path/to/your/ssl-cert.pem;
location / {
proxy_pass http://app2;
}
}
server {
listen 443 ssl;
server_name app3.example.com;
ssl_certificate_key /path/to/your/ssl-key.pem;
ssl_certificate /path/to/your/ssl-cert.pem;
location / {
proxy_pass http://app3;
}
}
server {
listen 443 ssl;
server_name app4.example.com;
ssl_certificate_key /path/to/your/ssl-key.pem;
ssl_certificate /path/to/your/ssl-cert.pem;
location / {
proxy_pass http://app4;
}
}
這里要注意的幾件事:
upstream
指令在頂部定義,現在可以按名稱引用。
upstream
塊,並且proxy_pass
行如下所示: proxy_pass http://10.176.225.83:8888;
server
塊。 如果它們分別在不同的端口上服務,也將是這種情況。 server
塊中的ssl_certificate
和ssl_certificate_key
可以指向不同的證書,甚至指向同一證書。 https://app1.example.com
: https://app1.example.com
https://app2.example.com
: https://app2.example.com
https://app3.example.com
: https://app3.example.com
https://app4.example.com
: https://app4.example.com
多個目錄
對於使用單個主機和端口進行配置,從子目錄提供后端應用程序的服務,將使用具有多個location
塊的單個server
塊:
# Nginx reverse-proxy configuration
upstream app1 {
server 10.176.225.83:8888;
}
upstream app2 {
server 10.176.225.83:8088;
}
upstream app3 {
server 10.176.225.83:8042;
}
upstream app4 {
server 10.176.225.83:8890;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate_key /path/to/your/ssl-key.pem;
ssl_certificate /path/to/your/ssl-cert.pem;
location /app1 {
proxy_pass http://app1;
}
location /app2 {
proxy_pass http://app2;
}
location /app3 {
proxy_pass http://app3;
}
location /app4 {
proxy_pass http://app4;
}
}
這件事要注意的其他幾點:
upstream
服務。 而且,如果您喜歡直接路線,仍然可以忽略它們。 該指令在復雜的配置中更有用。 server
塊,但是它們各自的子目錄具有單獨的location
塊。 https://example.com/app1
: https://example.com/app1
https://example.com/app2
: https://example.com/app2
https://example.com/app3
: https://example.com/app3
https://example.com/app4
: https://example.com/app4
TLS配置
在這兩種情況下,您都需要配置由公共CA或內部PKI(如果適用)簽名的SSL證書。 如果您的應用要面向公眾,則需要使用公共證書。 然后,將它們的位置添加到上述Nginx配置中。
進一步閱讀
舉一個真實的例子,您可以查看我用於Genieacs TR-069服務器的Nginx配置,該服務器實現SSL並反向代理一些其他服務,盡管它們的原始端口不在443上。這可能很有用您想將它們保留在其原始端口上。
Nginx站點在反向代理基本配置方面也有不錯的介紹。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.