本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定代理伺服器
Elastic Beanstalk 可以使用 NGINX 或 Apache HTTPD 作為反向代理,將應用程式對應至連接埠 80 上的 Elastic Load Balancing 負載平衡器。預設值為 NGINX。 Elastic Beanstalk 提供預設代理組態,您可以使用自己的組態延伸或完全覆寫。
Elastic Beanstalk 預設會設定代理將請求轉送至連接埠 5000 上的應用程式。您可將 PORT
環境屬性設定為主要應用程式接聽的連接埠,藉此覆寫預設連接埠。
注意
應用程式接聽的連接埠不會影響 NGINX 伺服器會接聽從負載平衡器接收請求。
在您的平台版本上設定代理伺服器
所有 AL2023/AL2 平台都支援統一的代理組態功能。如需在執行 AL2023/ 的平台版本上設定代理伺服器的詳細資訊AL2,請參閱 反向代理組態。
如果您的 Elastic Beanstalk Node.js 環境使用 Amazon Linux AMI平台版本 (Amazon Linux 2 之前的版本),請閱讀本節中的資訊。
備註
-
本主題中的資訊僅適用於以 Amazon Linux AMI() 為基礎的平台分支AL1。AL2023/AL2 平台分支與先前的 Amazon Linux AMI(AL1) 平台版本不相容,且需要不同的組態設定。
-
2022 年 7 月 18 日,Elastic Beanstalk 會根據 Amazon Linux AMI(AL1) 將所有平台分支的狀態設定為已淘汰。如需有關遷移至完全支援的目前 Amazon Linux 2023 平台分支的詳細資訊,請參閱 將您的 Elastic Beanstalk Linux 應用程式遷移到 Amazon Linux 2023 或 Amazon Linux 2。
所以此 Node.js 平台使用反向代理將請求從執行個體上的連接埠 80 轉送到正在接聽連接埠 8081 的應用程式。Elastic Beanstalk 提供了預設的代理組態,您可以加以擴展,或使用自己的組態將其完全覆寫。
若要擴展預設的組態,請利用組態檔案,將 .conf
檔案加入至 /etc/nginx/conf.d
。如需特定範例,請參閱 在執行 Node.js 的 EC2 執行個體上終止 HTTPS。
所以此 Node.js 平台會設定 PORT 環境變數至代理伺服器將流量傳遞至其中的連接埠。在您的程式碼中讀取此變數,以設定您應用程式的連接埠。
var port = process.env.PORT || 3000;
var server = app.listen(port, function () {
console.log('Server running at http://127.0.0.1:' + port + '/');
});
預設的 NGINX 組態會將流量轉送至nodejs
名為 的上游伺服器127.0.0.1:8081
。您可以移除預設的組態,並在組態檔案中提供自己的組態。
範例 .ebextensions/proxy.config
下列的範例移除了預設的組態,並新增自訂組態,來將流量轉傳到 5,000 埠而非 8,081 埠。
files:
/etc/nginx/conf.d/proxy.conf:
mode: "000644"
owner: root
group: root
content: |
upstream nodejs {
server 127.0.0.1:5000;
keepalive 256;
}
server {
listen 8080;
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
}
access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
access_log /var/log/nginx/access.log main;
location / {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
location /static {
alias /var/app/current/static;
}
}
/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh:
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash -xe
rm -f /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
service nginx stop
service nginx start
container_commands:
removeconfig:
command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"
範例組態 (/etc/nginx/conf.d/proxy.conf
) 使用了位於 /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
的預設組態做為基礎,以納入預設的伺服器區塊,此區塊具備壓縮與日誌設定,和靜態檔案映射。
removeconfig
命令會移除容器的預設組態,因此代理伺服器使用自訂組態。Elastic Beanstalk 會在部署每個組態時,重新建立預設組態。為了說明這一點,在下列範例中,會新增 post-configuration-deployment掛鉤 (/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh
)。這會移除預設配置,並重新啟動代理伺服器。
注意
預設組態可能會在未來的 版本中變更 Node.js 平台。請使用最新版本的組態來做為您自訂項目的基礎,以確保相容性。
如果您覆寫預設組態,則必須定義任何靜態檔案映射,並 GZIP 壓縮。這是因為平台無法套用標準設定。