Назад | Перейти на главную страницу

Подкаталог NGINX с rewrite и proxy_pass

Я хочу, чтобы прокси мог вернуть все необходимое для правильного возврата того, что необходимо для просмотра http://joelmccune.com через прокси-сервер NGINX, http://nginx/joel. То, что у меня есть до сих пор, отлично работает для корня сайта, но когда корень пытается загрузить ресурсы, такие как файлы css, из подкаталогов, клиент не может их разрешить.

Например, в корне сайта файл index.html содержит строку для загрузки внешнего файла css.

<link rel="stylesheet" type="text/css" href="/assets/css/screen.css?v=4a6391e0a5" />

Этот файл находится по адресу ...

http://joelmccune.com/assets/css/screen.css?v=4a6391e0a5

... и я хочу, чтобы прокси распознал шаблон. Чтобы вернуть ресурс по URL ...

http://nginx/joel/assets/css/screen.css?v=4a6391e0a5

Прямо сейчас он не работает, ошибка 404, так как он пытается загрузиться из ...

http://nginx/assets/css/screen.css?v=4a6391e0a5

Очевидно, что существует несколько подкаталогов, и я хочу иметь возможность добавлять больше прокси-серверов, поэтому я пытаюсь понять, как создать универсальный шаблон для этого.

Вот файл конфигурации, который я использую ...

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    # if the request is a referall from //nginx/joel
    if ($http_referrer ~* nginx/joel) {

        # rewrite the request to be prefixed with //nginx/joel
        rewrite ^/?(.*)$ http://nginx/joel/$2 last;
    }

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    # proxy any requests to /joel to http://joelmccune.com
    location /joel {
        proxy_pass http://joelmccune.com/;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

Вот заголовки ответа от первоначального запроса к корню.

HTTP/1.1 200 OK
Server: nginx/1.12.0
Date: Tue, 23 May 2017 20:56:49 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid=db5b717394ddd2681553aed3a5a6d354b1495573008; expires=Wed, 23-May-18 20:56:48 GMT; path=/; domain=.joelmccune.com; HttpOnly
Status: 200 OK
x-powered-by: Express
cache-control: public, max-age=0
vary: Accept-Encoding
X-Ghost-Cache-Status: From Cache
CF-RAY: 363aec8a00b479ff-SEA
Content-Encoding: gzip

Вот заголовки запроса для получения примера ресурса css. Глядя на referer, у меня возникла идея попытаться изолировать последующие запросы ресурсов с помощью rewrite ... идея в настоящее время не работает.

GET /assets/css/screen.css?v=4a6391e0a5 HTTP/1.1
Host: nginx
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept: text/css,*/*;q=0.1
DNT: 1
Referer: http://nginx/joel/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

И вот заголовки ответов из моего примера ресурса, файла css ... очевидно, не дающих особого понимания, кроме подтверждения, что он не загружается.

HTTP/1.1 404 Not Found
Server: nginx/1.12.0
Date: Tue, 23 May 2017 20:56:49 GMT
Content-Type: text/html
Content-Length: 571
Connection: keep-alive

Заранее благодарим вас за любую информацию, которую вы можете предложить. Это беспокоит меня большую часть пары дней.

Примечание. Чтобы проверить и узнать, как все это работает, я использую Vagrant + VirtualBox + Ubuntu + NGINX с измененным файлом моих локальных хостов, чтобы все запросы направлялись на http://nginx на IP-адрес виртуальной машины. Это должно объяснить структуру URL, подробно описанную выше.