Apache-2.2

Htaccess 與 Nginx 的奇怪行為

  • October 28, 2016

我有一個在 Nginx (v1.0.14) 上執行的站點作為反向代理,它代理對 Apache (v2.2.19) 的請求。所以 Nginx 在 80 埠上執行,Apache 在 8080 上。

整個站點執行良好,只是我無法使用 .htaccess 文件阻止對某些目錄的訪問。

例如,我在 ‘www.site.com’ 上有 ‘my-protected-directory’ 在裡面我有 htaccess 和以下程式碼:

<Files *>
order deny,allow
deny from all
allow from 1.2.3.4 <--- my ip address here
</Files>

當我嘗試使用我的 ip (1.2.3.4) 訪問此頁面時,我收到 404 錯誤,這不是我所期望的:

http://www.site.com/my-protected-directory

但是,當此頁面由 Apache 直接提供時,一切都會按預期工作。我可以看到這個頁面,其他人看不到。

http://www.site.com:8080/my-protected-directory

更新。 Nginx 配置(7.1.3.7 是站點 ip。):

user  apache;
worker_processes  4;
error_log  logs/error.log;
pid        logs/nginx.pid;

events {
   worker_connections  1024;
}

http {
   include       mime.types;
   default_type  application/octet-stream;

   log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';

   sendfile        on;
   keepalive_timeout  65;
   gzip  on;
   gzip_min_length 1024;
   gzip_http_version 1.1;
   gzip_proxied any;
   gzip_comp_level 5;
   gzip_types    text/plain text/css
                 application/x-javascript text/xml
                 application/xml application/xml+rss
                 text/javascript image/x-icon;

   server {
   listen       80;
   server_name  www.site.com site.com 7.1.3.7;
   access_log  logs/host.access.log  main;

   # serve static files
   location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
     root    /var/www/vhosts/www.site.com/httpdocs;
     proxy_set_header Range "";
     expires 30d;
   }

   # pass requests for dynamic content to Apache
   location / {
     proxy_redirect               off;
     proxy_set_header X-Real-IP  $remote_addr;
     proxy_set_header Host $http_host;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Range "";
     proxy_pass      http://7.1.3.7:8080;
   }
 }

更新 2:安裝了 mod_rpaf 並正確確定了 IP 地址

誰能告訴我出了什麼問題以及如何解決?

我已經設法解決了這個問題。問題出在 Rpaf 模組中,該模組在某些情況下無法正常工作。“條件”是指 Apache 版本和作業系統。(我的是 CentOS 上的 Apache 2.2)

無論如何,要解決這個問題,你應該禁用 rpaf 模組並從這里安裝它的更新檔版本: mod_realip2

安裝簡單明了。希望這對某人有所幫助,因為我花了數小時尋找解決方案。

如果 nginx 代理到 apache,那麼與 apache 的連接來自 nginx,而不是來自您,因此您的IP 永遠不會進入等式。

您可以根據您的原始 IP 設置環境變數(將儲存在 x-forwarded-for 標頭中),然後允許使用該變數集的請求:

<Location "/">
   SetEnvIf X-Forwarded-For ^1\.2\.3\.4 proxy_env
   Order allow,deny
   Satisfy Any
   Allow from env=proxy_env
</Location>

引用自:https://serverfault.com/questions/373266