127.0.0.1 만 액세스 할 수 있도록 일부 VHost에 대한 액세스를 제한하고 싶습니다. 항상 VHost를 외부 IP가 아닌 로컬 호스트에 바인딩하기 위해 다음과 같은 것을 사용했습니다.
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
....
}
}
그러나 일부 자습서에는 allow
localhost에 대한 명시 적 지시문이 포함되어 있으며 다른 모든 호스트를 신속하게 거부하는 것으로 나타났습니다 .
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
allow 127.0.0.1;
deny all;
...
}
}
127.0.0.1에서만 이미 청취 할 때 이러한 allow
/ deny
지시문이 실제로 필요합니까?
답변
listen
지시어는 웹 서버 바인딩 자체를 인터페이스 무엇에 운영 체제를 알려줍니다. 따라서 netstat -a
nginx를 시작한 후 살펴보면 nginx가 127.0.0.1 IP 포트 80에서만 수신한다는 것을 알 수 있습니다. 이는 다른 인터페이스를 통해 nginx 서버에 연결할 수 없음을 의미합니다.
특정 IP 주소에 대한 바인딩은 실제 네트워크 스택 에서 nginx 구성 의 allow
/ deny
지시문 보다 낮은 수준에서 작동 합니다.
즉 , 네트워크 스택에서 연결이 제한되어 있으므로 사용 사례와 함께 구성 내에 별도의 allow
/ deny
지시문이 필요하지 않습니다 .
사용자가 지정 listen 80;
하고 allow
/ deny
지시문을 사용 하면 nginx는 클라이언트에 HTTP 오류 코드를 전송하여 액세스가 거부되었음을 알려줍니다.
이 listen 127.0.0.1;
경우 브라우저에 연결할 TCP 포트가 없기 때문에 브라우저가 서버에 전혀 연결할 수 없습니다.
답변
네트워크 ID가이라고 가정하고 192.168.1.0
conf 파일을 다음과 같이 편집하십시오.
location / {
# block one workstation
deny 192.168.1.1;
# allow anyone in 192.168.1.0/24
allow 192.168.1.0/24;
# drop rest of the world
deny all;
}
어떻게 작동하는지 알려주세요.
편집 # 1 :
네, 공식 Nginx 위키 에 따르면 allow 지시문은 필수 입니다 . 그들의 예는 다음과 같습니다.
location / {
allow 192.168.1.1/24;
allow 127.0.0.1;
deny 192.168.1.2;
deny all;
}
답변
나는 동일한 기능을 달성하고 싶었고 (nginx의 로컬 사용자 만 허용) 다음과 같이 간단한 것을 할 수 있다는 것을 알았습니다.
server {
listen 127.0.0.1:80;
index index.html index.htm index.nginx-debian.html;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /path/to/folder;
}
location / {
include proxy_params;
}
}
이 구성 파일은 나에게 잘 작동하며 allow
지시문을 사용하지 않고 있지만 127.0.0.1:80
nginx 액세스를 로컬 사용자로만 제한 할 수 있습니다!