Nginx는 .htaccess 및 숨겨진 파일을 비활성화하지만 .well-known 디렉토리는 허용합니다.


16

Nginx 서버가 있고 숨겨진 파일을 비활성화했습니다. nginx_vhost.conf

## Disable .htaccess and other hidden files
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

그러나 LetsEncrypt는 .well-known디렉토리에 액세스해야합니다 .

.well-known디렉토리를 허용 하고 다른 숨겨진 파일을 거부하려면 어떻게해야 합니까?


참고 : nginx에는 .htaccess파일이 없거나 파일 이 없습니다 . 구성 파일이 있지만 호출 .htaccess되지도 않고 동일하게 작동하지도 않습니다.
Rob

답변:


17

다른 솔루션은 도움이되지 않았습니다.

내 해결책은에 대한 정규 표현식 을 포함시키는 것 입니다 .well-known. 코드 블록은 다음과 같아야합니다.

## Disable .htaccess and other hidden files
location ~ /\.(?!well-known).* {
    deny all;
    access_log off;
    log_not_found off;
}

로 시작하는 점을 제외한 모든 점 파일을 차단합니다. .well-known

추신 : 나는 또한 return 404;블록에 추가 할 것 입니다.


1
가요 location ~* /\.(?!well-known\/) {에서 볼 수 있듯이 github.com/h5bp/server-configs-nginx/blob/master/h5bp/location/... 이 동일 location ~ /\.(?!well-known).* { ?
프로 백업

3
아니요 정확히 동일하지 않습니다. /\.(?!well-known\/)(정의로 잘 알려진 것을 제외한 모든 도트 파일을 차단하기 때문에) 정규 표현식만큼 표현력이 없습니다. 어쩌면 가장 location ~ /\.(?!well-known\/).*잘 알려진 디렉토리 만 이론적으로 차단 하는 것과 같은 조합이 가장 좋습니다 .well-known-blabla. 그러나 이론적 .well-known-blabla 파일을 차단하지 않으면 실제 위험이 없다고 생각합니다.
therealmarv

어쨌든 Nginx가 처리하지 않기 때문에 왜 htaccess를 비활성화합니까?
Webwoman

3
예, 당신은 @webwoman 맞지만 때로는 혼합 환경이 있습니다. 실제로 필요한 경우를 제외하고는 내 점 (.git과 같은 원치 않는 노출이나 보안 노출)으로 내 도트 파일을 제공해서는 안됩니다.
therealmarv

16

Nginx는 구성 파일에 나타나는 순서대로 정규식이있는 위치를 적용합니다.

따라서 현재 위치 바로 앞에 이와 같은 항목을 추가 하면 도움이됩니다.

location ~ /\.well-known { 
    allow all;
}

고마워요, 이것이 바로 내가 필요한 것입니다! 모든 도트 파일에 대한 액세스를 거부하는 규칙 앞에 배치했습니다. 내가 바꾼 것은 점을 탈출하는 것 location ~ /\.well-known {입니다. 어느 쪽이든, 이것은 받아 들여지는 대답이어야합니다.
aexl

8

내 웹 사이트 에서 NGINX로 Let 's Encrypt를 사용하는 방법대한 전체 단계별 자습서를 제공했습니다 .

주요 부분은 다음과 같습니다.

  • 공식 클라이언트는 괜찮고 Amazon Linux에서는 실제로 좋지 않습니다. 다른 클라이언트 ACME를 추천합니다 .
  • 내 권장 클라이언트와 함께 webroot 메소드에이 위치를 사용하십시오. 요청은 https가 아닌 http를 통해 제공됩니다.

https 블록에 리스너가 전혀 필요하지 않으며 모두 https에서 수행됩니다. 이것은 단지 도메인을 제어한다는 것을 증명하기위한 것이며 개인 또는 비밀을 제공하지 않습니다.

# Answer let's encrypt requests, but forward everything else to https
server {
  listen       80;
  server_name  example.com www.example.com
  access_log  /var/log/nginx/access.log main;

  # Let's Encrypt certificates with Acmetool
  location /.well-known/acme-challenge/ {
    alias /var/www/.well-known/acme-challenge/;
  }

  location / {
    return       301 https://www.example.com$request_uri;
  }
}

위에 링크 된 전체 단계별 가이드.


3

이것을 (전후) 추가하십시오 :

location ^~ /.well-known/ {
        log_not_found off;
     }

일치하는 ^~수정자가 정규식보다 우선 하므로 맨 아래에 이것을 추가 할 수도 있습니다 . 문서를 참조하십시오 .


0

구성 파일이 많고 .htaccess에 대한 거부가 이미있는 경우

location ~ /\.ht { deny all; }

그런 다음 모든 점 파일을 무시하는 대신 .git에 대해 두 번째 무시를 추가하면됩니다.

sed -i '/location ~ \/\\.ht { deny all; }/a \  location ~ \/\\.git { deny all; }' /etc/nginx/*
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.