nginx 在Azure VMSS上使用Cloud Init部署WordPress时收到502错误网关

6fe3ivhb  于 2023-03-17  发布在  Nginx
关注(0)|答案(1)|浏览(131)

你好,我正在尝试部署一个WordPress的示例到一个虚拟机规模设置在Azure与应用网关使用Terraform和云init。
目前我得出的结论是,这个问题是如何'wordpress.conf'和'wp-config.php'文件被挂载的结果,而不是由于基础设施相关的配置,因为当命令被限制为只启动nginx的公共IP返回'欢迎使用nginx'消息在预期的端口80.
下面是当前正在使用的云init文件

#cloud-config
    package_upgrade: true
    packages:
      - nginx
      - php-curl
      - php-gd
      - php-intl
      - php-mbstring
      - php-soap
      - php-xml
      - php-xmlrpc
      - php-zip
      - php-fpm
      - php-mysql
      - nfs-common

    write_files:
    - path: /tmp/wp-config.php
      content: |
          <?php
          define('DB_NAME', 'wordpressdb');
          define('DB_USER', 'wordpress');
          define('DB_PASSWORD', 'w0rdpr3ss@p4ss');
          define('DB_HOST', '${database_fqdn}');
          $table_prefix = 'wp_';
          if ( ! defined( 'ABSPATH' ) ) {
            define( 'ABSPATH', __DIR__ . '/' );
          }
          require_once ABSPATH . 'wp-settings.php';
          ?>

    - path: /tmp/wordpress.conf
      content: |
        server {
            listen 80;
            server_name _;
            root /data/nfs/wordpress;

            index index.html index.htm index.php;

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

            location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
            }

            location = /favicon.ico { 
                log_not_found off; 
                access_log off; 
            
            }

            location = /robots.txt {
                log_not_found off;
                access_log off;
                allow all;
            }

            location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
              expires max;
              log_not_found off;
            }

            location ~ /\.ht {
                deny all;
            }

        }

    runcmd: 
      - mkdir -p /data/nfs/wordpress
      - mount -t nfs ${wordpress_storage_account_name}.file.core.windows.net:/${wordpress_storage_account_name}/${client_tag}wpstorageshare${environment_prefix} /data/nfs -o vers=4,minorversion=1,sec=sys
      - wget http://wordpress.org/latest.tar.gz -P /data/nfs/wordpress
      - tar xzvf /data/nfs/wordpress/latest.tar.gz -C /data/nfs/wordpress --strip-components=1
      - cp /tmp/wp-config.php /data/nfs/wordpress/wp-config.php
      - cp /tmp/wordpress.conf  /etc/nginx/sites-available/wordpress.conf
      - ln -s /etc/nginx/sites-available/wordpress.conf .
      - chown -R www-data:www-data /data/nfs/wordpress
      - rm /etc/nginx/sites-enabled/default
      - rm /etc/nginx/sites-available/default
      - mkdir /etc/systemd/system/nginx.service.d
      - printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" > /etc/systemd/system/nginx.service.d/override.conf
      - systemctl daemon-reload
      - systemctl restart nginx

注意:上面的cloud-init文件被配置为解压缩WordPress nginx配置文件并将其放置在安装到Azure存储帐户的目录中,该帐户被配置为NFS。
我已经尝试修复它的一些事情如下:

  • 更新“location /”块语法不正确(无变更)
  • 已使用sudo nginx -t检查配置语法(返回OK)
  • 已尝试更改端口nginx服务器正在侦听(无更改)
  • 在配置虚拟机时浏览串行日志以查找可能的错误(无错误)
  • 运行“sudo systemctl status nginx”以检查服务器错误(状态为正在运行)

我的期望是wordpress安装程序会在第一次访问应用程序网关上的公共ip时显示出来。

frebpwbc

frebpwbc1#

我已经解决了我自己的问题。答案是将符号链接创建在一个sites enabled目录下的根目录中。对于这个例子,它看起来像:\

ln -s /etc/nginx/sites-available/wordpress.conf /data/nfs/wordpress/sites-enabled/wordpress.conf

注意:这些问题特定于在带有Azure应用网关的Azure虚拟机规模集上部署WordPress。
另外,如果你这样做了,仍然得到502错误,请确保wordpress能够建立数据库连接,为此,你可以通过任何你喜欢的方法登录到服务器,运行curl localhost:port,看看nginx返回什么。
建议您在服务器上对来自服务器的html响应进行 curl ,因为如果没有一个VM示例是健康的,ApplicationGateway将返回502。

相关问题