nginx tanpa nama_server dan hanya menggunakan alamat ip statis?

34

ini adalah penerapan aplikasi web pertama saya dan saya menghadapi semua jenis masalah.

Saya saat ini pergi untuk implementasi nginx + gunicorn untuk aplikasi Django, tetapi sebagian besar pertanyaan ini berkaitan dengan konfigurasi nginx. Untuk beberapa konteks - nginx akan menerima koneksi dan proxy ke server lokal gunicorn.

dalam konfigurasi nginx, di mana dikatakan server_nameapakah saya harus menyediakannya? Saya tidak berencana menggunakan nama domain apa pun, hanya melalui ip eksternal jaringan saya (ini statis) dan nomor port untuk didengarkan.

Keinginan saya adalah ketika saya mengakses sesuatu seperti http://xxx.xxx.xxx.xxx:9050saya bisa mendapatkan situs tersebut.

Berikut ini adalah contoh kode tempat saya akan mendasari konfigurasi untuk referensi.

   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;
     }
pesta-
sumber

Jawaban:

31

server_namedefault ke string kosong, yang baik-baik saja; Anda dapat mengecualikannya sepenuhnya.

Pendekatan umum lain untuk kebutuhan "Saya tidak ingin memberi nama pada ini" adalah menggunakan server_name _;

http://xxx.xxx.xxx.xxx:9050URL Anda tidak akan berfungsi dengan konfigurasi ini; Anda hanya mendengarkan di port 80. Anda harus menambahkan listen 9050;juga.

Shane Madden
sumber
hei bisakah kamu melihat pada serverfault.com/questions/678521/…
Muhammad Umer
agak terkait
Muhammad Umer
5

nama server _; bukan wildcard lihat di sini:

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

cukup tentukan arahan default_server untuk akses hanya-ip (lihat http://nginx.org/en/docs/http/request_processing.html )

server {
    listen 1.2.3.4:80 default_server;
    ... 
    }
Joe
sumber
2
Dianjurkan untuk hanya menautkan ke informasi yang berguna dan tidak memasukkannya dalam jawaban Anda - dalam hal ini server_name _;adalah tidak cocok.
BE77Y
1
"bukan wildcard" == "bukan pertandingan". Saya yakin mereka akan mendapatkannya.
Joe
2
Keduanya tidak sama; non-match adalah apa yang disajikan ketika tidak ada yang cocok, sementara wildcard cocok dengan segalanya. Intinya di sini adalah bahwa informasi yang berguna harus dalam jawaban, tidak tertaut pada beberapa situs lain (namun disajikan dengan baik di situs itu), sebagaimana dirinci di sini
BE77Y
Dan intinya adalah bahwa ini bukan 'jawaban yang baik' tetapi ini adalah jawaban. Maaf tidak ada waktu Jika Anda ingin mengedit / menulis ulang, saya memberi Anda izin penuh untuk. Kalau tidak, mereka akan tahu persis apa yang harus dilakukan, dan itu sangat membantu. Jangan ragu untuk menulis ulang, jika tidak, jawabannya ada.
Joe
3
Jika Anda 'tidak punya waktu' untuk memasukkan garis tambahan dengan informasi terkait, saya jujur ​​tidak tahu mengapa Anda repot-repot menjawab posting 3 tahun dengan jawaban yang diterima!
BE77Y
4

Jika Anda ingin aplikasi Anda merespons pada port 9050 tanpa hostname tertentu maka Anda dapat melewati server_name, itu tidak diperlukan karena Nginx pertama-tama menyelesaikan entri mendengarkan dan kemudian server_name jika ada:

server {
   listen 9050;

   .....
}

Lebih detail di sini: Nginx server_name dan cara kerjanya

Gansbrest
sumber