所以,基本上我在一个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文件:
jupyterhub Nginx反向代理
反向代理Elasticsearch传输端口
哪一个最有效率:通过Nginx直接提供静态文件,还是通过Nginx反向代理来提供节点?
不能用Nginx(反向代理+ SSL协商)和Tomcat上传大文件
Apache代理导致ERR_CONTENT_DECODING_Failed错误
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正确服务,但是,没有任何资产。 这是因为Joomla中的URL是由JURI类生成的,这个JURI类似乎依赖于$ request_uri,而这个请求在到达Joomla时已经丢失了。
https://github.com/joomla/joomla-cms/blob/6ab2a6e9010e7e04c260b9eba17dc76e866dd3e6/libraries/joomla/uri/uri.PHP#L87
HTTP://本地主机/login
HTTP://localhost/images/headers/maple.jpg
代替:
HTTP://本地主机/的Joomla /login
HTTP://localhost/joomla/images/headers/maple.jpg
然而,当我访问第二组URL时,我可以访问链接/资产没有问题…但当然,再次,没有图像,模板,JS或链接被正确渲染。
除非出现错误,否则我宁愿不要触及joomla.conf,至于site.conf,我只想将URI段转换为映射到其他应用程序的请求,例如:
/joomla -> localhost:8081 /PHPbb -> localhost:8082 /someapp -> localhost:8083
如何在rails日志中logging像Nginx这样的代理服务器上的真实客户端ip
configurationNginx代理微caching服务器块中的特定位置
有没有让Node.js充当HTTP反向代理的解决scheme?
Nginx反向代理,只允许从主机名不连接ip
来自Nginx的反向代理将无法运行。 网站是正常的
最干净的解决方案将是修改您的上游,为所有资源提供独特的路径。
从上游(具有唯一的前缀)移除URL的部分通常比向非唯一的部分添加额外的部分要容易得多。 这是因为你总是可以捕获更长的URL,并确切地知道它指的是什么,随后返回一个301或302重定向到一个更短,更简洁的版本。
另一方面,面对像/这样的简短请求URL,很难确定它可能引用哪个应用程序(除非您也查看$http_referer变量,然后有条件地发出基于哪里的重定向URL请求来自于),或者除非你实现某种意大利细面条规则来检测哪个URL引用哪个应用程序(如果你走这条路线, map指令可能派上用场)。
另外,考虑到安全性以及Cookie的使用情况,在单个域中运行多个独立应用程序并不是最佳实践 – 在一个应用程序中妥协可能会导致所有其他应用程序中的安全违规。
正如Rinos所说,你需要在configuration.PHP中配置$live_site var,如下所示:
public $live_site = '/joomla/';
我在Github做了一个完整的例子,在编辑这个文件后效果很好,它使用你的配置。
变为:
你可以尝试使用sub_filter它是如何在这个答案中提到的。
所以在你的情况下你的Nginx配置应该看起来像这样:
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; sub_filter "http://your_server/" "http://your_server/joomla/"; sub_filter_once off; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。