2012-04-25 37 views
11

Tôi đang cố gắng thiết lập nginx để "static.domain.com" chỉ có thể phân phối hình ảnh. Đây là những gì tôi đã đưa ra, nhưng tôi biết nó có thể được thực hiện hiệu quả hơn. Tôi muốn phục vụ 403.html nếu ai đó cố gắng truy cập mọi tệp .htm, .php, thư mục (bất kỳ thứ gì khác tôi bị thiếu?). Tất nhiên, ngoại trừ 403.htm và tệp static.htm.nginx - chỉ phục vụ hình ảnh

Bất kỳ ý tưởng nào về cách tôi có thể bảo mật thông tin này đúng cách?

server { 
    listen   xx.xx.xx.xx:80; 

    server_name  static.domain.com; 

    root   /www/domain.com/httpdocs; 
    index   static.htm; 

    access_log  off; 
    error_log  /dev/null crit; 

    error_page 403 /403.html; 

    # Disable access to .htaccess or any other hidden file 
    location ~ /\.ht { 
     deny all; 
    } 

    location ~* \.php { 
     deny all; 
    } 

    # Serve static files directly from nginx 
    location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) { 
     add_header  Cache-Control public; 
     add_header  Cache-Control must-revalidate; 
     expires   7d; 
    } 
} 

Trả lời

18

Tại sao không di chuyển hình ảnh lên và sau đó từ chối tất cả?

location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) { 
    add_header  Cache-Control public; 
    add_header  Cache-Control must-revalidate; 
    expires   7d; 
} 
location/{ 
    deny all; 
} 

không có cú pháp nào KHÔNG khớp với cụm từ thông dụng. Thay vào đó, hãy khớp biểu thức chính quy mục tiêu và gán một khối trống, sau đó sử dụng vị trí/để khớp với bất kỳ thứ gì khác. -Từ http://wiki.nginx.org/HttpCoreModule#location

Edit: Removed "=" từ "địa điểm /" Để trích dẫn tài liệu:

location =/{ 
    # matches the query/*only.* 
} 
location/{ 
    # matches *any query*, since all queries begin with /, but regular 
    # expressions and any longer conventional blocks will be 
    # matched first. 
} 

xấu của tôi.

+0

Thật đơn giản? không có gì khác là cần thiết? –

+0

Nên, tất nhiên tôi sẽ kiểm tra nó để chắc chắn là tôi đã không chạy những gì tôi đã viết ở đó. Vị trí ~ * \. (Jpg | jpeg | gif | png ...) khớp với tất cả các loại được liệt kê ở đó tách biệt với các đường ống, nếu không thì nó sẽ khớp với "/" vì "/" khớp với mọi thứ. –

+0

Ok, điều này sẽ không hoạt động vì trong FireFox, bất kỳ tệp .php nào được truy cập đều cho phép người dùng tải xuống tệp (hiển thị lời nhắc tải xuống). –

Các vấn đề liên quan