上下文:
- 我让 nginx 监听端口 80 并提供静态文件(jpg、css、js 等)
- 如果是非静态文件,我会通过代理传递到在 8080 监听的 Apache
- 我使用“secure_link”来保护我的文件不被未经授权的人员下载。
- 我的 DNS 中有一个 A 记录,例如:
sub1 IN A 123.45.67.89
结果:
- sub1.mydomain.org 成功访问。
- “secure_link” 几乎成功运行,我确实可以像这样保护我的文件:
http://123.45.67.89/authorized/personal.zip?h=jrzkNDEX5ie3nALar2_uuQ&e=1371539981
问题:
- 如果我将“ip”替换为“subdomain”,它会返回 nginx 403 错误:
http://sub1.mydomain.org/authorized/personal.zip?h=jrzkNDEX5ie3nALar2_uuQ&e=1371539981
额外信息:
- 除了奇怪的子域名问题之外,一切运行正常,我认为没有必要粘贴我的整个 nginx.conf 文件?
无论如何,这里是:
user www-data;
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
gzip_disable "msie6";
limit_conn_zone $binary_remote_addr zone=slowuser:10m;
server {
listen 80;
server_name localhost;
location / {
#root /var/www;
#index index.html index.htm;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
add_header Cache-Control public;
}
location ~* \.(jpg|jpeg|gif|css|png|js|ico|swf|mp3)$ {
root /var/www;
expires 365d;
access_log off;
}
location /secretdir/ {
deny all;
return 403;
}
location /slow/ {
secure_link $arg_h,$arg_e;
secure_link_md5 secretkey1$uri$arg_e$remote_addr;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 403;
}
root /var/www;
limit_rate 25k;
limit_conn slowuser 2;
rewrite ^/slow/(.*)$ /secretdir/$1 break;
}
location /authorized/ {
secure_link $arg_h,$arg_e;
secure_link_md5 secretkey2$uri$arg_e$remote_addr;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 403;
}
root /var/www;
rewrite ^/authorized/(.*)$ /secretdir/$1 break;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
}
}
编辑:
请注意:
- mydomain.org 托管在服务器#1 上,其中声明了 sub1 的名称。
- sub1.mydomain.org A 名称重定向到服务器#2,服务器#2 托管要保护的文件。
- 上面的 nginx.conf 文件是服务器#2(sub1.mydomain.org)上的文件。服务器#1(mydomain.org)仅运行 Apache2。
- 服务器#2 上的目录如下:
/var/www/
|_ download/
|_ index.html
- 开场http://sub1.mydomain.org在浏览器中正确打开 index.html (在服务器#2上)
答案1
服务器名称本地主机;
这确实是你的 nginx.conf 中的配置,还是你为 SF 伪造的?如果你希望 IP 和域名从同一个虚拟主机处理请求,你应该将配置更改为
listen 80 default_server;
server_name _;
我建议通过 HTTP 301(永久移动)将对您的 IP 地址的请求路由到有效的域名。
我希望这有帮助。