谷歌负载均衡器 + nginx + symfony2

谷歌负载均衡器 + nginx + symfony2

我正在尝试配置一个可扩展的 symfony2 应用程序,所以我阅读了这个页面https://cloud.google.com/compute/docs/load-balancing/http/cross-region-example

我按照他们说的做了每件事,使用一个简单的 nginx 配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ /index.html;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules
    }
}

这样我就能得到积极的健康检查,如果我尝试http://ip_load_balancer我得到了 nginx 的默认页面。

但是当我尝试我真正的 nginx 的配置时:

server {
listen 80;
server_name myapp-public.com;
root /usr/share/nginx/html/app-public/web;


recursive_error_pages off;

error_log /var/log/nginx/app_error.log;
access_log /var/log/nginx/app_access.log;

location / {
    try_files $uri /app.php$is_args$args;
}

# PROD
location ~ ^/app\.php(/|$) {
    internal;
    fastcgi_pass php:9000;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    fastcgi_index  index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param HTTPS off;
    fastcgi_intercept_errors on;
}
}

当我尝试http://ip_load_blancer,我收到 502 服务器错误。但是当我尝试http://ip_vm1,我得到了我的应用程序(我打开所有 http 访问来测试)。

此外,所有健康检查均失败。我不太明白哪里出了问题,有什么想法吗?

谢谢。

答案1

读了你的评论后,我认为我的问题在于@George

您需要记住,如果检查健康失败,则不会重定向到特定实例。==> 所以我为我的 nginx 创建了一个默认配置(我在配置中添加了 ssl)

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;
    }
}

第二件事,您必须接受来自负载均衡器的流量并从 Google 进行健康检查到实例的端口 80(在我的情况下是 443)。

==>https://cloud.google.com/compute/docs/load-balancing/http/cross-region-example#shutting_off_https_access_from_everywhere_but_the_load_balancing_service

我希望这对你有帮助,如果你想要更多细节,或者你不明白某些事情,请告诉我,我会尽力解释更多。

PS:抱歉让您久等了

相关内容