Невозможно получить nginx для обслуживания PHP приложения после входа nginx "502 плохой шлюз" - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть старое приложение vanilla PHP, с которым я играю, пытаюсь Dockerize, а затем помещаю его в кластер Kubernetes.

Я обновил приложение до php7.3-fpm и пытаюсь добавить nginx к тому же изображению. Что-то вроде php7.3-apache, но с использованием nginx и php-fpm.

Я наткнулся на этот ответ , который предлагает решение для построения изображения. Я изменил его в соответствии со своими потребностями, но у меня возникли проблемы с его получением для фактического обслуживания приложения:

  • Он просто возвращает "502 Bad Gateway nginx/1.14.2", если перейти к /admin/
  • Он просто возвращает "Welcome to nginx!", если я перейду к /admin

Похоже, ingress-nginx и nginx как минимум обмениваются данными. Просто index.php не обслуживается.

Не совсем уверен, где я иду не так.

Вот моя конфигурация:

# project structure

root/
  /conf
    app.conf
    default.conf
    entrypoint.sh
    file_size.ini
  /src
    index.php
    all other.php 
  Dockerfile.dev
  Dockerfile
# ingress-nginx.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/add-base-url: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.org/client-max-body-size: "500m"
    nginx.ingress.kubernetes.io/use-regex: "true"
  name: ingress-service-dev
  namespace: default
spec:
  rules:
    - http:
        paths:
          - path: /admin/?(.*)
            backend:
              serviceName: admin-cluster-ip-service-dev
              servicePort: 4000

# admin.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: admin-deployment-dev
spec:
  replicas: 1
  selector:
    matchLabels:
      component: admin
  template:
    metadata:
      labels:
        component: admin
    spec:
      containers:
        - name: admin
          image: testappacr.azurecr.io/test-app-admin
          ports:
            - containerPort: 4000
---
apiVersion: v1
kind: Service
metadata:
  name: admin-cluster-ip-service-dev
spec:
  type: ClusterIP
  selector:
    component: admin
  ports:
    - port: 4000
      targetPort: 4000
# Dockerfile
FROM php:7.3-fpm

# PHP_CPPFLAGS are used by the docker-php-ext-* scripts
ENV PHP_CPPFLAGS="$PHP_CPPFLAGS -std=c++11"

RUN apt-get update \
    && apt-get install -y nginx \ 
    && apt-get install -y libpq-dev zlib1g-dev libzip-dev \
    && docker-php-ext-install pgsql zip mbstring opcache 
RUN { \
        echo 'opcache.memory_consumption=128'; \
        echo 'opcache.interned_strings_buffer=8'; \
        echo 'opcache.max_accelerated_files=4000'; \
        echo 'opcache.revalidate_freq=2'; \
        echo 'opcache.fast_shutdown=1'; \
        echo 'opcache.enable_cli=1'; \
    } > /usr/local/etc/php/conf.d/php-opocache-cfg.ini

COPY . /usr/share/nginx/html
COPY ./conf/default.conf /etc/nginx/conf.d/default.conf
COPY ./conf/entrypoint.sh /etc/entrypoint.sh
# COPY --chown=www-data:www-data . /app/src

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
RUN mv "/usr/share/nginx/html/conf/file_size.ini" "$PHP_INI_DIR/conf.d/"

WORKDIR /usr/share/nginx/html/src

EXPOSE 4000

ENTRYPOINT ["sh", "/etc/entrypoint.sh"]
# default.conf

server {
    listen 4000;
    root   /usr/share/nginx/html/src;

    include /etc/nginx/default.d/*.conf;

    index app.php index.php index.html index.htm;

    client_max_body_size 500m;

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

    location ~ [^/]\.php(/|$) {
      fastcgi_split_path_info ^(.+?\.php)(/.*)$;
      # Mitigate https://httpoxy.org/ vulnerabilities
      fastcgi_param HTTP_PROXY "";
      fastcgi_pass 127.0.0.1:4000;
      fastcgi_index index.php;
      include fastcgi.conf;
    }
}

Что я облажался здесь?

1 Ответ

1 голос
/ 08 апреля 2020

Хорошо, разобрался ...

Следующее, что у меня было в default.conf, было неверным:

fastcgi_pass 127.0.0.1:4000;

Это должно было остаться так (что было в ответе I копировал) ...

fastcgi_pass 127.0.0.1:9000;

Наивно не знал, что это было по умолчанию для php-fpm.

...