我有一个工作的nginx实例,其中包含以下规则。但是我将所有请求都指向domain.com/ghost
时遇到了困难我尝试将location / {}
块修改为location /ghost/ {}
,但没有成功。我只是从幽灵应用程序中获得了404。有什么建议吗?
server {
listen 80;
server_name domain.com;
root /home//user/ghost/;
index index.php;
# if ($http_host != "domain.com") {
# rewrite ^ http://domain.com$request_uri permanent;
# }
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:2368;
}
location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff)$ {
access_log off;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public, mustrevalidate, proxy-revalidate";
proxy_pass http://127.0.0.1:2368;
}
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }
location ~ /\.ht {
deny all;
}
}
答案 0 :(得分:1)
我正在使用regexp location
指令进行类似的代理设置。这是缩小配置文件:
worker_processes 1;
pid /path/to/file.pid;
worker_priority 15;
events {
worker_connections 512;
accept_mutex on;
}
http {
server {
error_log /path/to/log/error.log error;
listen 127.0.0.1:9000;
server_name example.com;
location ~* (/ghost) {
expires epoch;
proxy_no_cache 1;
proxy_pass http://localhost:1234;
}
location / {
proxy_pass http://localhost:1234;
}
}
}
答案 1 :(得分:1)
解决了其他不支持子文件夹的应用程序的类似问题。这两个应用程序都构建在一个平台上,因此它们都尝试在/ fx目录中工作。我不得不将其中一个放入子文件夹/ gpms。
这个想法是将带有referer的请求从子文件夹重定向到子文件夹之外链接的目的地 - 我只是将子文件夹添加到这样的uris的开头。它并不理想,但它确实有效。
这是我的nginx配置:
server {
listen 80;
server_name mydomain.com;
location / {
rewrite ^/$ /fx/;
proxy_pass http://127.0.0.1:56943/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 300;
}
error_log /var/log/nginx/debug.log debug;
set $if_and_hack "";
if ( $http_referer ~ '^http://mydomain.com/gpms/.*$' ) {
set $if_and_hack "refgpms";
}
if ( $uri !~ '^/gpms/.*$' ) {
set $if_and_hack "${if_and_hack}_urinogpms";
}
if ( $if_and_hack = "refgpms_urinogpms" ) {
rewrite ^/(.*)$ http://$host/gpms/$1;
}
location /gpms/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cookie_path /fx /;
proxy_pass http://127.0.0.1:12788/fx/;
proxy_redirect default;
}
}
外部链接将被破坏,但对我来说并不重要,我猜它可能会得到纠正。
$ if_and_hack用于克服嵌套条件下的nginx限制。
顺便说一下,我遇到了一个cookie问题,因为它们设置了路径,并且在重定向后没有为新路径发送cookie,因此点击浏览器错误,所以我只是从cookie中删除路径。
请注意重写中的完整链接表单 - 这种重写形式会立即将浏览器重定向到新页面,您不应将其更改为“/ gpms / $ 1”。
作为替代方案,我猜,可以使用nginx module来检查html内容并修改链接。我没试过这个。或者考虑使用子域而不是子文件夹。
答案 2 :(得分:0)