laravel - 如何将 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 入口。
谢谢...
解决方案
但我不想使用自定义 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 并完成它。
推荐阅读
- jquery - Jquery 步骤基本示例 - 字段未出现
- twitter-bootstrap - 引导排水沟
- asp.net-core - 使用 PuppeteerSharp 的 AspNet Core Razor 视图
- angular - mat-selection-list 不显示在 mat-autocomplete 中
- airflow - 如何屏蔽 Airflow 日志中的凭据?
- php - 在特定日期销售特定 Woocommerce 商品,在特定时间范围内销售其他商品
- sql - SQL查询3列,计数1并仅分组另一列
- python - 如何将 xarray MFdataset 转换为多个 geotiff?尝试了两种方法,到目前为止都失败了
- python - Playbook getting stuck when non-OS Python Interpreter is enforced on managed node
- javascript - 将参数传递给forEach循环内的回调函数?