Zastąp Apache zwinnym Nginx-em na macOS

Kamil Karkoszka
Ageno Blog
Published in
2 min readDec 10, 2016

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;
}

--

--