Saya mencoba mengatur pengembangan nginx / PHP server saya dengan konfigurasi dasar master / catch-all vhost sehingga saya dapat membuat ___.framework.loc
domain tanpa batas sesuai kebutuhan.
server {
listen 80;
index index.html index.htm index.php;
# Test 1
server_name ~^(.+)\.frameworks\.loc$;
set $file_path $1;
root /var/www/frameworks/$file_path/public;
include /etc/nginx/php.conf;
}
Namun, nginx merespons dengan kesalahan 404 untuk pengaturan ini. Saya tahu nginx dan PHP berfungsi dan memiliki izin karena localhost
konfigurasi yang saya gunakan berfungsi dengan baik.
server {
listen 80 default;
server_name localhost;
root /var/www/localhost;
index index.html index.htm index.php;
include /etc/nginx/php.conf;
}
Apa yang harus saya periksa untuk menemukan masalah? Ini adalah salinan dari php.conf yang mereka muat.
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_index index.php;
# Keep these parameters for compatibility with old PHP scripts using them.
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Some default config
fastcgi_connect_timeout 20;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_pass 127.0.0.1:9000;
}
php
nginx
virtualhost
Xeoncross
sumber
sumber
Konfigurasi nginx bukan program, ini adalah deklarasi. Ketika Anda menggunakan konfigurasi seperti ini:
Tidak ada cara untuk memastikan bahwa
set
arahan Anda akan dijalankan sebelumnyaroot
.Tapi ada trik dengan
map
arahan yang saya suka gunakan. Itu bergantung pada fakta yangmap
dievaluasi sebelumnyalocation
sumber
$mypath
sini? Itu tidak digunakan di mana pun.$mypath
adalah grup hasil untuk regex~^(.?<mypath>+)\.frameworks\.loc$
dan$rootpath
merupakan hasil untuk seluruh trik peta.Selain jawaban DukeLion yang hebat , saya perlu mengubah jalur
~^(.?<mypath>+)\.frameworks\.loc$ $mypath;
untuk
~^(?P<mypath>.+)\.frameworks\.loc$ $mypath;
dalam
/etc/nginx/nginx.conf
file saya seperti yang disarankan di sini .Menambahkan
root /var/www/frameworks/$rootpath
di
/etc/nginx/sites-available/default
bekerja dengan baik setelah itu.sumber
Mungkin Anda bisa melihat lighttpd juga. Ini telah membangun dukungan untuk apa yang Anda minta di sini. Itu adalah panggilan mod_evhost .
Aktifkan evhost
Tambahkan baris berikut ke lighttpd.conf Anda. Jika Anda menggunakan distribusi basis Debian / Ubuntu, cukup tautan lunak atau salin dari
/etc/lighttpd/conf-available/10-evhost.conf
ke/etc/lighttpd/conf-enabled/
.The
%_
(wildcard) di sarana evhost.path-Patten menggunakan nama domain lengkap (misalnya. Www.example.com). Permintaan untuk www.example.com akan secara otomatis mengarah ke root-dokumen/home/www/www.example.com/
.Menambahkan situs tambahan semudah membuat direktori lain
/home/www
dengan nama domain lengkap. Tidak ada perubahan ke file konfigurasi Lighttpd.Ada wildcard lain dan dapat digunakan untuk membangun struktur direktori. Mereka adalah sebagai berikut
Informasi detail ada di sini .
PS: Mengaktifkan PHP juga mudah jika Anda menggunakan platform debian / ubuntu. Cukup aktifkan
10-fastcgi.conf
dan15-fastcgi-php.conf
.sumber
NGINX menggunakan pustaka ekspresi reguler PCRE.
Pada NGINX v0.8.25
server_name
direktif memungkinkan penangkapan bernama .Saya menggunakan cuplikan berikut untuk "memagari" lingkungan pengembang. «Pengguna» mengacu pada nama pengguna mereka dan «proyek» proyek tempat mereka bekerja:
Perhatikan bahwa konfigurasi nginx bersifat deklaratif, dan dengan demikian, deklarasi statis mungkin selalu lebih cepat dibandingkan dengan nilai dan variabel yang dihitung run-time. Evaluasi ekspresi reguler relatif mahal, saya kira itu harus digunakan dengan kekikiran di lingkungan (produksi) yang sarat muatan.
sumber