Próbuję skonfigurować mój programistyczny serwer nginx / PHP z podstawową konfiguracją vhost master / catch-all, aby w razie potrzeby móc tworzyć nieograniczoną liczbę ___.framework.loc
domen .
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;
}
Jednak nginx odpowiada błędem 404 dla tej konfiguracji. Wiem, że nginx i PHP działają i mam uprawnienia, ponieważ localhost
konfiguracja, której używam, działa dobrze.
server {
listen 80 default;
server_name localhost;
root /var/www/localhost;
index index.html index.htm index.php;
include /etc/nginx/php.conf;
}
Co powinienem sprawdzić, aby znaleźć problem? Oto kopia tego php.conf, które ładują.
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
źródło
źródło
Konfiguracja Nginx nie jest programem, to deklaracja. Gdy używasz config w ten sposób:
Nie ma sposobu, aby zapewnić, że twoja
set
dyrektywa zostanie wykonana wcześniejroot
.Ale jest pewna sztuczka z
map
dyrektywą, której lubię używać. Opiera się na fakcie, którymap
jest oceniany wcześniejlocation
źródło
$mypath
tu chodzi? Nigdzie nie jest używany.$mypath
jest grupą wyników dla wyrażenia regularnego~^(.?<mypath>+)\.frameworks\.loc$
i$rootpath
stanowi wynik dla całej sztuczki z mapą.Oprócz świetnej odpowiedzi DukeLiona musiałem zmienić linię
~^(.?<mypath>+)\.frameworks\.loc$ $mypath;
do
~^(?P<mypath>.+)\.frameworks\.loc$ $mypath;
w moim
/etc/nginx/nginx.conf
pliku, zgodnie z sugestią tutaj .Dodawanie
root /var/www/frameworks/$rootpath
w
/etc/nginx/sites-available/default
pracował dobrze po tym.źródło
Może możesz zajrzeć również do lighttpd. Ma wbudowaną obsługę dokładnie tego, o co tutaj pytasz. Nazywa się to mod_evhost .
Włącz evhost
Dodaj następujące wiersze do pliku lighttpd.conf. Jeśli używasz podstawowej dystrybucji Debian / Ubuntu, po prostu soft link lub skopiuj z
/etc/lighttpd/conf-available/10-evhost.conf
do/etc/lighttpd/conf-enabled/
.%_
( Symbol wieloznaczny) w evhost.path-patten oznacza użycie pełnej nazwy domeny (np. Www.example.com). Zapytanie o www.example.com automatycznie przekieruje do katalogu głównego dokumentu/home/www/www.example.com/
.Dodanie dodatkowej strony jest tak proste, jak utworzenie innego katalogu
/home/www
z pełną nazwą domeny. Brak zmian w pliku konfiguracyjnym Lighttpd.Istnieją inne symbole wieloznaczne i można ich używać do budowania struktury katalogów. Są one następujące
Szczegółowe informacje są tutaj .
PS: Włączenie PHP jest również łatwe, jeśli korzystasz z platformy debian / ubuntu. Po prostu włącz
10-fastcgi.conf
i15-fastcgi-php.conf
.źródło
NGINX korzysta z biblioteki wyrażeń regularnych PCRE.
Od NGINX v0.8.25
server_name
dyrektywa zezwala na przechwytywanie nazwane .Używam następującego fragmentu do „ogrodzenia” środowisk programistów. „Użytkownik” odnosi się do nazwy użytkownika i „proj” projektu, nad którym pracują:
Zauważ, że konfiguracja nginx jest deklaratywna i dlatego deklaracje statyczne mogą zawsze być szybsze w porównaniu z wartościami i zmiennymi obliczanymi w czasie wykonywania. Ocena wyrażeń regularnych jest stosunkowo kosztowna, sądzę, że musi być używana z parsimony w środowiskach o dużym obciążeniu (produkcyjnym).
źródło