所以,基本上我在 Docker php7-fpm 容器中运行 Joomla,然后我有一个 nginx 容器,其中 joomla.conf 文件定义如下:
#https://docs.joomla.org/nginx
server {
listen 8081;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
server_name php-docker.local;
root /usr/src/joomla;
index index.php index.html index.htm default.html default.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
# deny running scripts inside writable directories
location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
return 403;
error_page 403 /403_error.html;
}
location ~ \.php$ {
fastcgi_pass joomla:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
#include /etc/nginx/fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
这按预期工作...转到 http://:8081 会正确加载所有内容。
现在,8081 只是暂时暴露在 nginx 容器中,我真正想做的是设置一个反向代理,这样 http:///joomla 将成为最终端点。
为此,我正在努力使用以下 conf 文件:
server{
listen 80;
server_name _;
location /joomla/ {
proxy_pass http://localhost:8081/;
proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
}
}
发生的情况是 HTML 提供了正确的服务,但是,没有任何 Assets 。这是因为 Joomla 中的 URL 是由 JURI 类生成的,该类似乎依赖于 $request_uri,当它似乎到达 Joomla 时,它已经丢失了。
https://github.com/joomla/joomla-cms/blob/6ab2a6e9010e7e04c260b9eba17dc76e866dd3e6/libraries/joomla/uri/uri.php#L87
因此,对文件、脚本或 css 的每个链接或引用都呈现如下:
http://localhost/login
http://localhost/images/headers/maple.jpg
代替:
http://localhost/joomla/login
http://localhost/joomla/images/headers/maple.jpg
但是,当我访问第二组 URL 时,我可以毫无问题地访问链接/ Assets ……当然,再一次,没有正确呈现图像、模板、js 或链接。
除非出现问题,否则我不喜欢碰 joomla.conf,至于 site.conf,我只想翻译 URI 段以将请求映射到其他应用程序,例如:
/joomla -> localhost:8081
/phpbb -> localhost:8082
/someapp -> localhost:8083
最佳答案
最简洁的解决方案是修改上游,为所有资源提供唯一路径。
从上游删除部分 URL(具有唯一前缀)通常比向非唯一部分添加额外部分要容易得多。这是因为您始终可以捕获较长的 URL 并准确了解它所指的内容,然后将 301 或 302 重定向返回到更短、更简洁的版本。
另一方面,面对短请求 URL,例如 /
,很难确定它可能引用哪个应用程序(除非您查看 $http_referer
变量,然后根据 URL 请求的来源有条件地发出重定向),或者除非您实现某种意大利面条规则来检测哪些单独的 URL 引用了哪些应用程序(如果您走这条路线,the map
directive可能会派上用场)。
此外,考虑到安全方面,当涉及到 cookie 时,在单个域上运行多个独立应用程序并不是最佳实践——一个应用程序的妥协很容易导致所有其他应用程序的安全违规。
https://stackoverflow.com/questions/44837737/
相关文章:
macos - 在 docker 中运行 Webpack-dev-server 比在本地机器上运行要
docker - 如何使用 docker-compose yml 文件进行生产?
docker - Dockerfile 中的开发依赖项或用于生产和测试的单独 Dockerfile
python - 如何将包含所有依赖项的 python 包安装到 Docker 镜像中?
docker - 是否可以使用 Winscp 连接到正在运行的 docker 容器?
docker - 失败 : port is already allocated
docker - Jenkins 2.0 : Running SBT in a docker con
java - 如何在Docker中初始化数据库后启动flyway