Bagaimana cara menetapkan host default untuk nginx?

11

Saya mencoba mencari cara mengatur host default untuk instalasi nginx saya. Saya menemukan artikel ini di nginx Wiki:

http://wiki.nginx.org/NginxVirtualHostExample#A_Default_Catchall_Virtual_Host

Sayangnya, ini tidak berhasil. Setelah restart saya mendapatkan ini:

Restarting nginx: nginx: [emerg] unknown directive "http" in /etc/nginx/sites-enabled/catchall:1
nginx: configuration file /etc/nginx/nginx.conf test failed

Setelah menghapus arahan http saya mendapatkan ini:

Restarting nginx: nginx: [emerg] unknown log format "main" in /etc/nginx/sites-enabled/catchall:7
nginx: configuration file /etc/nginx/nginx.conf test failed

Saya di Ubuntu 10.04.3 di mana saya menggunakan PPA nginx resmi. Versi 1.0.9 dari nginx sedang berjalan.

Ulf Klose
sumber

Jawaban:

16

Konfigurasi Nginx didasarkan pada serangkaian blok bersarang. Seharusnya hanya ada satu blok http. Ini biasanya didefinisikan dalam /etc/nginx/nginx.conf - semua file yang disertakan (misalnya dari situs yang tersedia) dimasukkan ke dalam blok http ini. Untuk mengatur host default / catch-all, Anda hanya perlu bagian blok server untuk host default Anda. Ini dilakukan dengan menambahkan 'default' ke directive listening. Selain itu, adalah umum untuk menggunakan nama_server yang tidak cocok dengan nama asli - biasanya garis bawah ("_"), tetapi karakter lain juga dapat diterima. Jika Anda menghilangkan parameter default, blok server pertama diperlakukan sebagai default. (Lihat panduan nginx ke server_names untuk informasi lebih lanjut)

Konfigurasi nginx default ('asli' dalam konteks ini) dapat mencakup blok server default (catch-all) di nginx.conf yang dapat Anda konfigurasi.

Sedangkan untuk kesalahan kedua, pastikan bahwa 'main' didefinisikan dalam nginx.conf (sebuah baris harus dimulai dengan 'log_format main ...' (dan, tentu saja, periksa tanda kurung Anda). Anda dapat menghilangkan seluruh baris 'access_log' sepenuhnya jika Anda tidak ingin permintaan ke server default Anda dicatat (atau dapat mengubah format dengan mendefinisikan format baru).

cyberx86
sumber
Itu cepat. Terima kasih. Akan coba ini besok setelah tidur sedikit ;-).
Ulf Klose
Menggunakan _ sebagai server_name tidak menambah "defaultness" dari server {}, itu hanya biasa digunakan untuk menjaga catchall dari bentrok dengan blok server lain, jadi tidak ada 'timpa' tentang flag default pada directive listen. Ini satu-satunya hal yang secara eksplisit menandai server sebagai default. Tetap saja, +1
kolbyjack
@ Kolbyjack - Terima kasih atas koreksi - Saya akan memperbaikinya dalam jawaban saya.
cyberx86
-1

Coba ini. Ganti return 404dengan tindakan default apa pun yang Anda inginkan.

/server//a/946083/453080

ThilinaB
sumber