Saya memiliki contoh menjalankan nginx yang melayani beberapa situs web. Yang pertama adalah pesan status di alamat IP server. Yang kedua adalah konsol admin aktif admin.domain.com
. Ini bekerja dengan baik. Sekarang saya ingin semua permintaan domain lainnya dialihkan ke satu index.php
- saya memiliki banyak domain dan subdomain dan tidak praktis untuk mencantumkan semuanya dalam konfigurasi nginx.
Sejauh ini saya sudah mencoba menyetel server_name
ke *
tetapi gagal karena wildcard tidak valid. *.*
berfungsi sampai saya menambahkan blok server lain, maka saya kira itu bertentangan dengan mereka.
Apakah ada cara untuk menjalankan blok server penampung semua di nginx setelah situs lain ditentukan?
NB Saya bukan spammer, ini adalah situs asli dengan konten yang bermanfaat, mereka hanya didukung oleh CMS yang sama dari database!
Jawaban:
Ubah opsi dengarkan ini di blok server penampung semua Anda. (Tambah
default_server
) ini akan mengambil semua koneksi yang tidak ditentukan (pada port yang ditentukan).jika Anda ingin memasukkan semuanya ke index.php jika file atau folder tidak ada;
sumber
server_name _;
untuk halaman status pada alamat IP, saya harus menentukanserver_name x.x.x.x
tetapi tidak apa-apa!default_server
tampaknya tidak berfungsi pada nginx 1.4.6 yang saat ini merupakan versi terbaru di Ubuntu 14.04 ... Ketika saya menambahkannya,configtest
perintah tersebut mengembalikan kesalahan, dan memulai ulang server juga tidak berfungsi. Saya telah mencoba konfigurasi yang sama persis di server saya dengan Debian jessie, yang memiliki nginx 1.6.2, dan berfungsi dengan sempurna. Jadi coba versi lain jika Anda menggunakan 1.4.6 ...default_server
arahan juga mengatur server yang akan menangani handshake SSL untuk permintaan pada port tersebut. Jadi, jika Anda ingin blok server A menangani SSL, tetapi server B bertindak sebagai penampung untuk HTTPS, solusinya adalah menyetelserver_name ~^(.+)$
pada server B.Garis bawah sederhana juga berfungsi:
Sumber: http://nginx.org/en/docs/http/server_names.html
sumber
listen 80 default_server
konfigurasi Anda._
apakah hanya nama yang tidak valid ?Ini akan berhasil:
sumber
server_name ~.
tampaknya lebih efisienBagi saya, entah bagaimana, definisikan default_server tidak berfungsi. Saya menyelesaikannya dengan
menggunakan ekspresi reguler semua.
sumber
Hanya 1
server
direktifDari Nginx
listen
DocsJika Anda hanya memiliki 1
server
direktif, itu akan menangani semua permintaan, Anda tidak perlu mengatur apapun.Beberapa
server
direktifJika Anda ingin mencocokkan semua permintaan dengan
server
direktif yang ditentukan , cukup tambahkandefault_server
parameter kelisten
, Nginx akan menggunakanserver
arahan ini sebagai default.Tentang
server_name _;
Dari Nginx Docs
Tidak peduli apa yang
server_name
Anda tetapkan, itu hanyalah nama domain yang tidak valid .sumber
Sekarang Anda bisa menggunakan topeng:
Lihat lebih lanjut di sini: http://nginx.org/en/docs/http/server_names.html
sumber
Jika Anda juga ingin menangkap permintaan dengan
Host
header kosong (yang diizinkan di HTTP / 1.0 ), Anda dapat menggunakan regex dan kosongserver_name
:sumber