nginx không có server_name và chỉ sử dụng địa chỉ IP tĩnh?


34

đây là triển khai ứng dụng web đầu tiên của tôi và đang gặp phải nhiều vấn đề.

Tôi hiện đang triển khai triển khai nginx + gunicorn cho ứng dụng Django, nhưng chủ yếu câu hỏi này liên quan đến cấu hình nginx. Đối với một số bối cảnh - nginx sẽ nhận được kết nối và proxy đến máy chủ cục bộ gunicorn.

trong cấu hình nginx, nơi tôi nói server_nametôi phải cung cấp một cấu hình ? Tôi không có kế hoạch sử dụng bất kỳ tên miền nào, chỉ thông qua ip bên ngoài của mạng của tôi (nó là tĩnh) và số cổng để nghe.

Mong muốn của tôi là khi tôi truy cập vào một cái gì đó như http://xxx.xxx.xxx.xxx:9050tôi sẽ có thể có được trang web.

Sau đây là mã mẫu mà tôi sẽ dựa trên các cấu hình để tham khảo.

   server {
        listen   80;
        server_name WHAT TO PUT HERE?;

    root /path/to/test/hello;

    location /media/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location /admin/media/ {
        # this changes depending on your python version
        root /path/to/test/lib/python2.6/site-packages/django/contrib;
    }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    }
        # what to serve if upstream is not available or crashes
        error_page 500 502 503 504 /media/50x.html;
     }

Câu trả lời:


31

server_namemặc định cho một chuỗi rỗng, điều này là tốt; bạn có thể loại trừ nó hoàn toàn.

Một cách tiếp cận phổ biến khác cho nhu cầu "Tôi không muốn đặt tên cho nhu cầu này" là sử dụng server_name _;

http://xxx.xxx.xxx.xxx:9050Mặc dù vậy, URL của bạn sẽ không hoạt động với cấu hình này; bạn chỉ nghe trên cổng 80. Bạn cũng cần thêm một listen 9050;.


hey bạn có thể có một cái nhìn tại này serverfault.com/questions/678521/...
Muhammad Umer

phần nào liên quan
Muhammad Umer

5

tên máy chủ _; không phải là ký tự đại diện xem tại đây:

http://blog.gahooa.com/2013/08/21/nginx-how-to-specify-a-default-server

chỉ cần chỉ định default_server chỉ thị cho truy cập chỉ ip (xem http://nginx.org/en/docs/http/request_ Processing.html )

server {
    listen 1.2.3.4:80 default_server;
    ... 
    }

2
Không khuyến khích chỉ liên kết đến phần thông tin hữu ích và không đưa nó vào câu trả lời của bạn - trong trường hợp này server_name _;là không khớp.
BE77Y

1
"không phải là ký tự đại diện" == "không khớp". Tôi chắc chắn họ sẽ nhận được nó.
Joe

2
Hai không bằng nhau; không khớp là những gì được phục vụ khi không có gì khác khớp, trong khi ký tự đại diện khớp với mọi thứ. Tuy nhiên, vấn đề ở đây là thông tin hữu ích nên có trong câu trả lời, không được liên kết trên một số trang web khác (tuy nhiên được trình bày tốt trên trang web đó), như được nêu chi tiết tại đây
BE77Y

Và vấn đề là đây không phải là "câu trả lời hay" mà là câu trả lời. Xin lỗi không có thời gian. Nếu bạn muốn chỉnh sửa / viết lại nó, tôi cung cấp cho bạn toàn quyền. Nếu không, họ sẽ biết chính xác phải làm gì, và nó rất hữu ích. Hãy viết lại nó, nếu không câu trả lời là viết tắt.
Joe

3
Nếu bạn không có "thời gian" để bao gồm một dòng bổ sung với thông tin thích hợp, tôi thực sự không biết tại sao bạn lại bận tâm trả lời bài đăng 3 năm tuổi với câu trả lời được chấp nhận!
BE77Y

4

Nếu bạn muốn ứng dụng của mình phản hồi trên cổng 9050 mà không có tên máy chủ cụ thể thì bạn có thể bỏ qua server_name, trước tiên Nginx không giải quyết mục nhập nghe và sau đó là server_name nếu có:

server {
   listen 9050;

   .....
}

Thêm chi tiết tại đây: Nginx server_name và cách thức hoạt động

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.