如何将Nginx Ingress与Laravel应用程序连接

时间:2018-12-28 03:32:27

标签: laravel nginx kubernetes nginx-ingress

我已经用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"]

我像这样安装了掌舵的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

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

我应该告诉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,而是想使用掌舵的nginx入口。.

谢谢...

1 个答案:

答案 0 :(得分:1)

  

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

我非常确定您在这里将两个不同的nginx-es进行了合并:入口控制器的nginx专为进行虚拟主机上游路由而设计,并且只是许多入口控制器实现中的一种。您故事中的另一个nginx负责处理位于PHP cgi-bin上游的“ HTTP”位(实际上是“ fpm”)。在这两种情况下,您都不必使用nginx,可以使用其他服务器,但是在您的情况下它们都是nginx的事实,我认为这会引起混乱。

由于(AFAIK)fpm的亮度不足以自行完成操作,因此您将希望在php容器内使用一个“本地” nginx来处理这些HTTP位。

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

您辛苦了,因为与整体内存和CPU预算相比,在群集中运行单独的nginx可能是舍入错误,并且肯定已经使您(和我)付出了更多葡萄糖会思考这种情况,而不是仅仅创建nginx.conf并完成它。

相关问题