我有一个运行 Nginx 的 EC2 实例,其中包含多个域。我的配置如下:
server {
listen 80;
#disable_symlinks off;
server_name _; #allow few domains
#Adding 'www.' to url in case it doesen't
if ($host !~* ^www\.) {
rewrite ^(.*)$ http://www.$host$1 permanent;
}
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php;
}
index index.html index.php;
}
我不确定在 ELB(亚马逊)上使用哪个 ping 路径,因为如果我尝试 HTTP,实例总是会失败。如果我尝试 TCP(端口 80),ping 会成功。我必须使用 HTTP,因为我想使用粘性。
有什么建议吗?谢谢,丹尼
答案1
Serverfault 上的另一个答案告诉我们,ELB 只期望200 OK
状态代码。
这对您的设置来说是一个问题,因为rewrite
会导致3**
状态代码。
为 ping 路径创建一个新位置,如下所示:
location = /elb-ping {
return 200;
}
然后确保使用 www. 进行 ping 以避免重定向
如果无法将 ping 域更改为 www. :
您必须将重定向到 www。移至一个server
块。
或者在配置中定义一个静态 ping 目标。
简单的方法
server {
listen 81; # What about using a different port for ELB ping?
server_name _; # Match all if the listen port is unique,
#server_name elb-instance-name; # Or match a specific name.
return 200; # Not much magic.
}
server {
listen 80;
#disable_symlinks off;
server_name _; #allow few domains
#Adding 'www.' to url in case it doesen't
if ($host !~* ^www\.) {
rewrite ^(.*)$ http://www.$host$1 permanent;
}
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php;
}
index index.html index.php;
}
太复杂的方法
server {
listen 80;
# match hostnames NOT being www.*
# Unfortunately matches only names with length >= 4
server_name ~^(?P<domain>[^w]{3}[^\.].*)$;
location / {
rewrite ^(.*)$ $scheme://www.$domain$1; # rewrite to www.*
}
location = /elb-ping {
return 200;
}
}
server {
listen 80;
server_name www.*; # match hostnames starting with www.*
## YOUR EXISTING CONFIG HERE (without the if block and elb-ping location)
}