2013-11-19 2 views
3

У меня есть рабочий экземпляр nginx с приведенными ниже правилами. Но у меня возникают трудности с указанием всех запросов на domain.com/ghostNginx - обратный прокси-сервер 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; 
    } 
} 

ответ

1

Я использую директиву регулярное_выражение 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; 
     } 
    } 
} 
+0

Благодарим за помощь. Я попробовал это, (меняя порт прослушивания proxy_pass), но я получаю 404. Можно ли использовать всю конфигурацию, которую вы используете? Может быть, мне что-то не хватает .. –

+0

Нет ничего особенного, просто обычные прокси-директивы. У меня нет корневых и индексных директив. Вы проверили журналы призраков? 404 - от призрака или от nginx? – djromero

+0

Это 4084 призрака. Это конфигурация, которую я использовал (остальное как в коде, который я написал выше): 'location ~ * (/ ghostblog) { 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; } место ~ * \ (?: ICO | CSS | JS | GIF | JPE г | PNG | TTF | Уофф?) $ { access_log от. Срок действия: 30d; add_header Pragma public; add_header Cache-Control "public, mustrevalidate, proxy-revalidate"; proxy_pass http://127.0.0.1:2368; } ' –

1

ли решить подобную проблему с другими приложениями, которые не имеют никакой поддержки вложенных папок. Оба приложения построены на одной платформе, поэтому оба они пытаются работать в директории/fx. Мне пришлось поместить один из них в подпапку/gpms.

Идея заключается в том, чтобы перенаправить запросы с реферер от вложенного в пункты назначения, которая связывает вне вложенного - я просто добавить вложенный в начало таких 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.

Обратите внимание на форму полной ссылки в переписывании - эта форма перезаписи сразу перенаправляет браузер на новую страницу, вы не должны менять его на «/ gpms/$ 1».

Как альтернатива, я думаю, это может быть возможно использовать nginx module для проверки содержимого HTML и изменить ссылки. Я этого не пробовал. Или рассмотрите использование поддоменов вместо подпапок.

Смежные вопросы