2016-09-24 2 views
0

Я размещаю несколько приложений django на одном сервере.

Когда пользователь посещает: http://dev-app.example.com/testapp1

Мне нужно, чтобы служить/статическими с корневым путем динамически генерируемым от $ Урии, потому что я не использую одни и те же активы через приложение, но тот же самый путь к ним.

Мой Nginx файлы конфигурации дерева:

nginx 
├── sites-enabled 
│   ├── myconf 
│   myapps/ 
│   ├── testapp1 
│   └── testapp2 

myconf файл:

server { 
    listen 8088; 
    server_name dev-app.example.com; 

    location = favicon.ico { access_log off; log_not_found off; } 

    location /static 
     # The line below isn't working even if the $uri has the string I want to concatenate 
     root /home/user$uri/current; 
    } 

    include /etc/nginx/myapps/*; 
} 

testapp1 файл:

location /testapp1 { 
    include uwsgi_params; 
    uwsgi_pass unix:/home/user/testapp1/current/testapp1.sock; 
} 

testapp2 файл:

location /testapp2 { 
    include uwsgi_params; 
    uwsgi_pass unix:/home/user/testapp2/current/testapp2.sock; 
} 

Я хочу использовать встроенную переменную $ uri nginx для создания моего корневого пути для/статического местоположения в файле myconf для каждого запрошенного приложения соответственно.

Когда пользователь открывает http://dev-app.example.com/whatever Я хочу служить этому:

# In the myconf file 
location /static { 
    root /home/user/whatever/current; 
} 
+0

Можете ли вы показать большую часть своей конфигурации nginx? Я не могу понять, как это должно работать ... – GwynBleidD

+0

@GwynBleidD Я просто сделал, спасибо. –

+0

Просто проверяя, правильно ли это понимается, ваши приложения подаются на '// yourdomain.com/testapp1' и' // yourdomain.com/testapp2', но для обоих приложений ваши статические файлы находятся в '//yourdomain.com/static '. Верный? – GwynBleidD

ответ

0

Он не будет работать таким образом.

Во-первых, вы должны понять, как работают HTTP-запросы. Каждый запрос, как для вашего веб-сайта, так и для статических файлов, является отдельным и имеет собственный URL-адрес. Nginx не может самостоятельно связать запрос на статический файл для запроса на веб-сайт, с которого был запрошен этот статический файл ...

Единственный способ, которым nginx может знать, что это Referer заголовок, который браузер может отправить с запросом в статический файл , Это может содержать путь к веб-документу, из которого был запрошен статический файл, но он также может быть пустым! Он также может содержать путь к корню вашего сайта.

Кроме того, браузеры будут пытаться кэшировать все, что они могут, так что если пользователь посещает http://example.com/testapp1 и что сайт содержит ссылки на http://example.com/static/style.css, браузер будет кэшировать и по запросу в http://example.com/testapp2 браузер не загрузит новый файл CSS, но будет лучше использовать кешированный.

Если вы уверены, что ваши веб-клиенты всегда отправят правильный заголовок Referer и не будут кэшировать какие-либо статические файлы, вы можете попытаться извлечь путь к приложению из переменной $http_referer в nginx.

+0

Спасибо за разъяснение, так что нет способа разместить несколько приложений в одном блоке сервера? –

+0

Да, есть! Но не так. Просто создайте отдельные статические пути для каждого приложения. Для этого установите для параметра 'STATIC_URL' значение django. – GwynBleidD

+0

Хорошо спасибо. На самом деле мне нужно сохранять/статично по некоторым причинам. Я закончил использование субдомена (testapp1.dev-app.example.com) - захват первой части (testapp1), а затем использование оператора if в nginx conf. –

0

Установите статическое расположение внутри каждого блока сервера

server { 
    listen 80; 

    server_name pool.simlabdevelopments.com; 
    root /srv/http/simlabdevelopments.com; 

    location /static/ { 
    alias /srv/webapps/autopool/static/; 
    } 
} 
+0

У меня есть только один серверный блок, и я хочу сделать псевдоним/корневую динамику на основе $ uri. –

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