에서 내 앱 서버를 통해 내 앱을 제공 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
앞에 추가하는 데 사용됩니다.
요청 경로를 최종 파일 경로에 매핑하는 두 가지 방법이 있습니다.
alias
location 블록에서만 사용할 수 있으며 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의 일부입니다 . 반면에 – alias
location 문의 지시문 인수는 URI의 일부입니다
따라서 alias
특정 URI를 파일 시스템의 특정 경로에 맵핑하는 다른 이름 인 반면, root
위치 인수는 root
지시문에 인수로 제공된 루트 경로에 추가 합니다.