에서 내 앱 서버를 통해 내 앱을 제공 8080하고 앱 서버를 건드리지 않고 디렉토리에서 내 정적 파일 을 제공해야 합니다. 내가 가지고있는 nginx 설정은 다음과 같습니다.
# app server on port 8080
# nginx listens on port 8123
server {
listen 8123;
access_log off;
location /static/ {
# root /var/www/app/static/;
alias /var/www/app/static/;
autoindex off;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
이제이 구성으로 모든 것이 잘 작동합니다. 점을 유의 root지시어는 주석.
활성화 root및 비활성화하면 alias-작동이 중지됩니다. 그러나 후행 /static/을 제거하면 root다시 작동하기 시작합니다.
누군가 무슨 일인지 설명 할 수 있습니까? 또한 사이의 차이점이 무엇인지 명확하고 자세하게 설명해주십시오 root과 alias, 그들의 목적은.
답변
혼란에 대한 답을 찾았습니다.
지시문 root과 alias지시문 사이에는 매우 중요한 차이점이 있습니다. root또는에 지정된 경로 alias가 처리 되는 방식에 차이가 있습니다 .
의 경우 root지시자 전체 경로 루트에 추가되는 위치 부분을 포함 하는 반면 경우, alias지시, 경로 부분 만 위치를 포함하지 않는 부분이 별명에 추가된다 .
설명하기 위해 :
구성이 있다고 가정 해 봅시다.
location /static/ {
root /var/www/app/static/;
autoindex off;
}
이 경우 Nginx가 도출 할 최종 경로는 다음과 같습니다.
/var/www/app/static/static
안에 404가 없기 때문에 이것은 돌아올 것입니다.static/static/
위치 부분이에 지정된 경로에 추가 되었기 때문 root입니다. 따라서와 함께 root올바른 방법은
location /static/ {
root /var/www/app/;
autoindex off;
}
한편,로 alias위치 부분이 삭제 됩니다. 그래서 설정을 위해
location /static/ {
alias /var/www/app/static/;
autoindex off; ↑
} |
pay attention to this trailing slash
최종 경로는 다음과 같이 올바르게 형성됩니다.
/var/www/app/static
alias지시어에 대한 슬래시의 경우
Nginx 문서에 따라 후행 슬래시가 필수인지에 대한 결정적인 지침은 없지만 여기 및 다른 곳의 사람들에 의한 일반적인 관찰은 그것이 사실임을 나타냅니다.
그럼에도 불구하고 결론을 내리지 않은 곳이 몇 군데 더 있습니다.
/server/376162/how-can-i-create-a-location-in-nginx-that-works-with-and-without-a-trailing-slas
답변
@treecoder와 같이
의 경우
root지시자 전체 경로 반면의 경우, 위치 부분을 포함하는 루트 부가된다alias지시자 위치 부분을 포함하지 않는 경로 부분 만 별명에 추가된다.
그림은 천 단어의 가치가 있습니다
에 대한 root:
에 대한 alias:
답변
귀하의 경우에는, 당신은 사용할 수 root있기 때문에, 지침 $uri의 일부 location지시어는 마지막으로 동일 root지시어 부분.
Nginx 문서는 다음과 같이 조언합니다 :
위치가 지시문 값의 마지막 부분과 일치 할 때 :location /images/ { alias /data/w3/images/; }대신 루트 지시문을 사용하는 것이 좋습니다.
location /images/ { root /data/w3; }
및 root지침은 추가합니다 $uri경로를.
답변
@good_computer의 매우 유용한 답변에 대한 간단한 부록, URL의 루트를 폴더로 바꾸고 싶었지만 정적 파일 (경로의 일부로 유지하려는)이 포함 된 하위 폴더와 일치하는 경우에만.
예를 들어 요청 된 파일이 /app/js또는 /app/css에 있는 경우를 참조하십시오 /app/location/public/[that folder].
정규식을 사용 하여이 작업을 수행했습니다.
location ~ ^/app/((images/|stylesheets/|javascripts/).*)$ {
alias /home/user/sites/app/public/$1;
access_log off;
expires max;
}
답변
alias는 요청 경로에서 LPP (Location Part Path)를 대체하는 데 사용되며 요청 경로 root앞에 추가하는 데 사용됩니다.
요청 경로를 최종 파일 경로에 매핑하는 두 가지 방법이 있습니다.
aliaslocation 블록에서만 사용할 수 있으며 outside를 재정의합니다 root.
alias및 root위치 블록에서 함께 사용될 수 없다.
답변
server {
server_name xyz.com;
root /home/ubuntu/project_folder/;
client_max_body_size 10M;
access_log /var/log/nginx/project.access.log;
error_log /var/log/nginx/project.error.log;
location /static {
index index.html;
}
location /media {
alias /home/ubuntu/project/media/;
}
}
nginx에서 정적 페이지를 유지하기위한 서버 블록.
답변
다시 말해서,이 간단한 정보를 유지하는 것입니다 :의 경우 root지정된 위치 인수는 파일 시스템의 경로 및 URI의 일부입니다 . 반면에 – aliaslocation 문의 지시문 인수는 URI의 일부입니다
따라서 alias특정 URI를 파일 시스템의 특정 경로에 맵핑하는 다른 이름 인 반면, root위치 인수는 root지시문에 인수로 제공된 루트 경로에 추가 합니다.


