Zastąp Apache zwinnym Nginx-em na macOS
Domyślnym serwerem WWW w systemie macOS jest Apache w wersji 2.4. Jest on funkcjonalny i pozwala w prosty sposób wyświetlać lokalne witryny oraz aplikacje internetowe. Jednak nie zawsze potrzebujesz wykorzystywać jego możliwości w pełni, dlatego możesz pozostawić go nieaktywnego w tle na rzecz nginx-a (czyt. engine x). Jest lekki i wydajny. Chciałbym poświecić mu chwilkę w tym krótkim wpisie. Skupię się na podstawowej konfiguracji, abyś mógł w paru prostych krokach uruchomić dowolną aplikację opartą o język PHP.
Przed przystąpieniem do instalacji, upewnij się, czy serwer Apache jest nieaktywny:
sudo apachectl stop
Korzystając z narzędzia homebrew, zainstaluj lokalnie serwer nginx:
brew install nginx
Domyślnie nginx przechowuje konfiguracje wirtualnych hostów w katalogu:
/usr/local/etc/nginx/servers
Przejdź teraz do głównej konfiguracji nginx-a:
/usr/local/etc/nginx/nginx.conf
Dokonaj zmiany:
# zastąp nazwą swojego użytkownika!
user wujku staff;
Kolejną rzeczą, którą musisz przygotować, jest serwer php-fpm. Jeśli nie posiadasz jeszcze zainstalowanego interpretera języka PHP, przejdź do sekcji PHP w artykule Środowisko web developera na macOS.
Wracając do serwera nginx, utwórz plik o nazwie php:
mkdir /usr/local/etc/nginx/includes
vi /usr/local/etc/nginx/includes/php
W jego zawartości znajdzie się reguła przechwytująca pliki z rozszerzeniem .php:
location ~ \.php$ {
if (!-f $document_root$fastcgi_script_name) {
return 404;
} fastcgi_pass 127.0.0.1:9001;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_buffer_size 4k;
fastcgi_buffers 256 4k;
fastcgi_max_temp_file_size 0;
include fastcgi_params;
}
Teraz stwórz plik zawierający wirtualnego hosta w katalogu /usr/local/etc/nginx/servers
:
vi /usr/local/etc/nginx/servers/ageno-pl.conf
Zawartość pliku ageno-pl.conf prezentuje się następująco:
server {
listen 8080;
server_name ageno.app;
index index.php index.html; # lokalizacja katalogu z aplikacją
root /Users/wujku/Sites/ageno-pl; access_log /usr/local/var/log/nginx/ageno-pl.access.log;
error_log /usr/local/var/log/nginx/ageno-pl.error.log; # wczytanie obsługi plików *.php
include includes/php;
}
Teraz wystarczy utworzyć plik index.php:
# pamiętaj o podmianie nazwy użytkownika w ścieżce!echo "<?= 'Ageno.pl' ?>" > /Users/wujku/Sites/ageno-pl/index.php
Przed uruchomieniem serwera nginx, możesz zweryfikować konfigurację korzystając z polecenia:
nginx -t
Uruchom serwer nginx oraz php-fpm:
brew services start nginx
brew services start homebrew/php/php71
Jeszcze mały test, czy wszystko funkcjonuje jak należy:
curl http://ageno.app:8080/// Ageno.pl
Jeśli chciałbyś, aby serwer działał na porcie 80, dokonaj zmiany w pliku:
# /usr/local/etc/nginx/servers/ageno-pl.conf# zamień 8080 na:
listen 80;
W tym momencie serwer uruchom z poleceniem sudo:
# wyłączenie aktualnie uruchomionego serwera
brew services stop nginx# uruchomienie z konfiguracją portu 80
sudo brew services start nginx
Jako mały bonus, zamieszczam dodatkową konfigurację dla aplikacji działającej w oparciu o framework Symfony:
# /usr/local/etc/nginx/includes/symfony2location / {
# app_dev.php lub app.php w zależności od środowiska
try_files $uri /app_dev.php$is_args$args;
}location ~ ^/(app|app_dev|config)\.php(/|$) {
if (!-f $document_root$fastcgi_script_name) {
return 404;
} fastcgi_pass 127.0.0.1:9001;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_buffers 128 4096k;
fastcgi_buffer_size 4096k;
include fastcgi_params;
}# /usr/local/etc/nginx/servers/symfony.confserver {
listen 80; server_name symfony.app;
# lokalizacja katalogu web
root /Users/wujku/Sites/symfony/web;
include includes/symfony2;
}