Apache-2.2
Htaccess 與 Nginx 的奇怪行為
我有一個在 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>