2016-09-24 3 views
0

하나의 서버에 여러 개의 장고 앱을 호스팅하고 있습니다.

때 사용자가 방문 : http://dev-app.example.com/testapp1 나는 애플 리케이션하지만 그들에게 동일한 경로에서 동일한 자산을 사용하지하고 있기 때문에이 동적으로 $의 URI에서 생성 된 루트 경로/정적 역할을 할 필요가

.

내의 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; 
} 

nginx 기본 변수 인 $ uri를 사용하여 각 요청한 앱에 대해 myconf 파일의 정적 위치에 대한 루트 경로를 작성합니다.

사용자가 I이 서비스를 제공 할 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에 대한 참조를 포함하는 경우, 브라우저는 새로운 CSS 파일을 다운로드하지 않습니다 그것과 http://example.com/testapp2 브라우저 요청을 캐시합니다, 오히려 사용합니다 하나를 캐시했다.

웹 클라이언트가 항상 Referer 헤더를 보내고 정적 파일을 캐시하지 않는다고 확신하는 경우 nginx에서 $http_referer 변수에서 앱 경로를 추출하려고 할 수 있습니다.

+0

설명해 주셔서 감사합니다. 따라서 한 서버 블록에 여러 개의 앱을 호스팅 할 방법이 없습니까? –

+0

예, 있습니다! 그러나 그런식이 아닙니다. 각 앱마다 별도의 고정 경로를 만드십시오. 장고에있는'STATIC_URL' 설정을 확인하십시오. – GwynBleidD

+0

감사합니다. 실제로 나는 몇 가지 이유 때문에/정적을 유지해야합니다. 나는 sub-subdomain (testapp1.dev-app.example.com)을 사용하여 끝냈다 - 첫 부분 (testapp1)을 캡쳐 한 다음 nginx conf에서 if 문을 사용했다. –

0

각 서버 블록

server { 
    listen 80; 

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

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

서버 블록이 하나 뿐이므로 $ uri를 기반으로 별칭/루트 동적을 만들고 싶습니다. –