首页 > 解决方案 > 如何将 Nginx Ingress 与 Laravel 应用程序连接起来

问题描述

我有像这样用Dockerfile定义的laravel图像......

FROM php:7.2-fpm

# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/

# Set working directory
WORKDIR /var/www

# Install dependencies
RUN apt-get update -y && apt-get install -y openssl zip unzip git libpng-dev

# Install extensions
RUN docker-php-ext-install gd

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www

# Copy existing application directory contents
COPY . /var/www

# Copy existing application directory permissions
COPY --chown=www:www . /var/www

# Change current user to www
USER www

# Expose port 8181 and start php-fpm server
EXPOSE 8181
CMD ["php-fpm"]

我已经像这样安装了带有 helm 的 nginx 入口...

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-resource
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/proxy-body-size: 10m
    ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/load-balancer: "ip-hash"
spec:
  tls:
    - hosts:
      - api.myweb.com
      - www.myweb.com
      secretName: secret
  rules:
  - host: api.myweb.com
    http:
      paths:
      - backend:
          serviceName: backend-golang
          servicePort: 8080
  - host: www.myweb.com
    http:
      paths:
      - backend:
          serviceName: frontend-laravel
          servicePort: 8181

使用此配置,502 Bad Gateway当我访问 www.myweb.com 时它会返回

我应该告诉 nginx 根文件夹在/var/www/public..?? 我怎么做?

我应该告诉 nginx 索引文件在index.php..??我怎么做?

我的参考是这个https://www.digitalocean.com/community/tutorials/how-to-set-up-laravel-nginx-and-mysql-with-docker-compose。但我不想使用自定义 nginx,而是想使用来自 helm 的 nginx 入口。

谢谢...

标签: laravelnginxkubernetesnginx-ingress

解决方案


但我不想使用自定义 nginx,而是想使用来自 helm 的 nginx 入口。

我很确定您在这里混淆了两个不同的 nginx-es:入口控制器的 nginx 严格设计用于执行 vhost 上游路由,并且只是众多入口控制器实现之一。您故事中的另一个 nginx 负责处理位于您的 php cgi-bin 上游的“HTTP”位(实际上就是它,“fpm”除外)。在这两种情况下,您都不必使用 nginx,您可以使用其他服务器,但是在您的情况下它们都是 nginx 的事实是我认为导致混乱的原因。

您将希望在您的 php 容器中使用“本地”nginx 来处理这些 HTTP 位,因为(AFAIK)fpm 不够明亮,无法自行完成。

我确实想知道您是否可以使用 nginx Ingress 注释将必要的location {}块注入到入口控制器的 nginx 配置文件中,但我只是不确定 nginx 是否需要能够看到 Pod 磁盘上的任何文件才能工作正确,在这种情况下,注释技巧将不起作用。

你是一分钱一分货,因为与整体内存和 CPU 预算相比,在集群中运行一个单独的 nginx 可能会是一个舍入误差,并且肯定已经花费了你(和我)更多的精力来思考这个边缘情况而不是它将只创建 nginx.conf 并完成它。


推荐阅读