我在 Google Cloud Platform 中创建了 6 个实例
- 亚洲第二
- 2 在美国
- 欧洲2个
每个区域有 3 个组
当我尝试访问我的应用程序时,我会被随机发送到一个区域,无论我在欧洲还是其他地方。
有关信息,我遵循了此文档https://cloud.google.com/compute/docs/load-balancing/http/cross-region-example
我仅添加一个区域并删除 http 配置。
6 个实例上没有流量,只有我。所有 6 个实例都可用,健康检查也呈阳性。
这是我刷新页面时的最后结果:
- 亚洲
- 欧洲
- 我们
- 欧洲
- 亚洲
- 亚洲
如果您有任何想法或者需要更多详细信息来帮助我,请直接询问,我会的。
更新 1
在每个实例中我都有一个带有一个默认conf的一个nginx:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/nginx/ssl/secure.crt;
ssl_certificate_key /etc/nginx/ssl/mysecure.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
然后我有我的应用程序配置:
server {
listen 443 ssl;
server_name myapp.example.com www.myapp.example.com;
ssl_certificate /etc/nginx/ssl/secure.crt;
ssl_certificate_key /etc/nginx/ssl/mysecure.key;
root /usr/share/nginx/html/app/web;
error_log /var/log/nginx/myapp.example.com_error.log;
access_log /var/log/nginx/myapp.example.com.log;
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
}
当我去https://ip-负载均衡器,它运行完美,总是获得最接近的实例。
但当我尝试https://myapp.example.com,它出错了,我在日志中看到有一些重定向。此外,当我检查负载均衡器的日志时,它将请求发送到好的实例,但我不知道如何跟踪该请求。
谢谢
答案1
这是 nginx 上的问题。我有多个 nginx 堆栈,对于它们收到的每个请求,它们都会执行循环来调用写入 php。
PHP 堆栈位于 6 台服务器上,因此它是随机的。
我将其更改为为每个区域创建 3 个不同的堆栈。
PS:我正在将docker与rancher一起使用。