似乎无法正常工作,需要帮助解决我出错的地方。
有一个旧的 PHP 应用程序子路径为 /admin
。 ingress-nginx
将其流量转发到 nginx
服务器在 Pod 中运行。我已经验证我可以执行以下操作并且它可以正确提供 Assets :
-
kubectl port-forward <admin-pod> 4000:4000
-
skaffold dev --port-forward
-
docker run -p 4000:4000 <image>
但是,当我尝试通过浏览器通过 minikube ip
连接访问它时, 192.168.64.5/admin
例如,我刚刚得到以下内容:
它显示 HTML,但没有加载任何资源,因为没有找到它们,我不确定为什么。
这是nginx
default.conf
为 PHP 应用程序提供服务。如果可能的话,我想在这里修复它,而不是在 ingress.yaml
中修复它。因为它们往往会干扰我的其他路线,并且花了我一些时间才能让它们正常工作。
这是我对这些文件的内容:
# default.conf
server {
listen 4000;
# rewrite ^([^.]*[^/])$ $1/ permanent;
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:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
# ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.org/client-max-body-size: "500m"
name: ingress-service-dev
namespace: default
spec:
rules:
- http:
paths:
- path: /adminv2/
backend:
serviceName: admin-new-cluster-ip-service-dev
servicePort: 4001
- path: /admin/
backend:
serviceName: admin-old-cluster-ip-service-dev
servicePort: 4000
- path: /api/
backend:
serviceName: api-cluster-ip-service-dev
servicePort: 5000
- path: /
backend:
serviceName: client-cluster-ip-service-dev
servicePort: 3000
# 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 --from=composer:latest /usr/bin/composer /usr/local/bin/composer
COPY ./conf/default.conf /etc/nginx/conf.d/default.conf
COPY ./conf/entrypoint.sh /etc/entrypoint.sh
WORKDIR /usr/share/nginx/html/src
RUN composer install
# 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/"
# EXPOSE 4000
ENTRYPOINT ["sh", "/etc/entrypoint.sh"]
# project structure
app-root/
admin-new/
admin-old/
conf/
company.conf
src/
css/
js/
Templates/
index.tbs
index.php
Dockerfile.dev
api/
client/
manifests/
# docker structure
/app
conf/
company.conf
src/
css/
js/
Templates/
index.tbs
index.php
Dockerfile.dev
感谢您的帮助。
最佳答案
通过将此路径移动到单独的入口配置,设法使所有路由正常工作。可能不太理想,但我只需要它能正常工作,直到 6 个月内更换为止。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.org/client-max-body-size: "500m"
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^(/admin)$ $1/ permanent;
name: ingress-service-dev-admin
namespace: default
spec:
rules:
- http:
paths:
- path: /admin/?(.*)
backend:
serviceName: admin-old-cluster-ip-service-dev
servicePort: 4000
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^(/new-admin)$ $1/ permanent;
name: ingress-service-dev
namespace: default
spec:
rules:
- http:
paths:
- path: /new-admin/
backend:
serviceName: admin-new-cluster-ip-service-dev
servicePort: 4001
- path: /api/
backend:
serviceName: api-cluster-ip-service-dev
servicePort: 5000
- path: /
backend:
serviceName: client-cluster-ip-service-dev
servicePort: 3000
关于php - nginx 不为 ingress-nginx 后面的 PHP 应用程序提供 JS、CSS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64163992/