프록시 패스를 사용할 때 Apache httpd에서 특정 URL을 어떻게 차단할 수 있습니까?

프록시 패스를 사용할 때 Apache httpd에서 특정 URL을 어떻게 차단할 수 있습니까?

내 사이트는 Apache httpd를 사용하여 Express(Node.js 앱)에서 실행되는 앱에 대한 역방향 프록시를 수행하고 있습니다. 2개의 익스프레스 서버를 보유하세요. 하나는 백엔드용이고 다른 하나는 프런트엔드 호스팅용입니다. 지금은 내 사이트로 들어오는 악의적인 요청을 차단하여 404 또는 잘못된 요청을 반환하려고 합니다.

내 some-site-ssl.conf 샘플은 아래에 있지만 악성 웹사이트를 차단하는 것 같지는 않습니다. 어떤 도움이라도 도움이 될 것입니다!! 감사합니다.


<VirtualHost _default_:443>
      ServerAdmin webmaster@localhost

      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined

      SSLEngine on

      SSLCertificateFile      /etc/letsencrypt/live/some-site.com/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/some-site.com/privkey.pem
      Include /etc/letsencrypt/options-ssl-apache.conf

      RewriteEngine On
      RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)?bad-word(-|.).*$  [NC]
      RewriteCond %{HTTP_REFERER} ^https://(www\.)?.*(-|.)?bad-word(-|.).*$  [NC]
      RewriteRule ^(.*)$ - [F,L]

      ProxyRequests On

      ProxyPass /api http://some-site.com:3000/api
      ProxyPassReverse /api http://some-site.com:3000/api

      ProxyPass / http://some-site.com:4226/
      ProxyPassReverse / http://some-site.com:4226/
</VirtualHost>

답변1

태그를 사용하여 모든 리소스에 대한 액세스를 제어할 수 있으며 Location, 이를 통해 다음과 같이 특정 호스트에서 리소스에 대한 액세스를 비활성화할 수 있습니다.

<Location "/denied/resource">
    <RequireAll>
        Require not ip 1.2.3.4
        Require not host spammer.domain
        Require all granted
    <RequireAll>
</Location>

액세스 권한은 위에서 아래로 상속되므로 에 대한 액세스를 거부하면 /사이트에서 해당 클라이언트가 실질적으로 잠기게 됩니다(물론 더 낮은 수준의 리소스에 대한 액세스 권한이 부여되어 에 액세스할 수 없지만 에 액세스할 수 /없는 경우는 제외). ) 에 액세스할 수 있습니다 /this/one/. 보다Apache HTTP 서버 문서더 많은 정보를 위해서.

그리고 @Freddy가 말했듯이 해당 ProxyRequests On줄을 제거해야 합니다.

관련 정보