OpenVZ - serwer WWW - nginx

Zabieramy się za kolejny element układanki - serwer WWW na nginx'ie.

Update paczek:

apt-get update
apt-get upgrade

Dalej:

dpkg-reconfigure dash -> używanie basha zamiast dasha

wybieramy No

Instalujemy bazę MySQL:

apt-get install ntp ntpdate mysql-client mysql-server openssl sudo -y


Edytujemy dostęp do mysql poza localhost:

nano /etc/mysql/my.cnf

Komentujemy linijkę bind-address:

[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

Restart usługi:

/etc/init.d/mysql restart

Teraz instalujemy nginxa oraz PHP wraz z potrzebnymi bibliotekami:

apt-get install nginx imagemagick php5-fpm php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-memcached php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcached php-apc fcgiwrap -y

Konfigurujemy PHP edytując plik php.ini:

nano /etc/php5/fpm/php.ini

[...]
cgi.fix_pathinfo=0
[...]
date.timezone="Europe/Warsaw"
[...]



Restart w celu załadowania konfiguracji

/etc/init.d/php5-fpm reload

Instalacja phpMyAdmin jest opcjonalna. Przyznam, że późniejsza konfiguracja wirtualnych hostów była męcząca i ostatecznie porzuciłem ten fragment - do działania na bazie będę używał innych narzędzi.

Jeśli jednak bardzo nam zależy to instalujemy phpMyAdmin:

apt-get install phpmyadmin -y

Pytania i odpowiedzi:

Web server to reconfigure automatically: none
Configure database for phpmyadmin with dbconfig-common? No

Konfiguracja dla lokalnego nginxa:

location /phpmyadmin {
       root /usr/share/;
       index index.php index.html index.htm;
       location ~ ^/phpmyadmin/(.+\.php)$ {
               try_files $uri =404;
               root /usr/share/;
               fastcgi_pass unix:/var/run/php5-fpm.sock;
               fastcgi_index index.php;
               fastcgi_param SCRIPT_FILENAME $request_filename;
               include /etc/nginx/fastcgi_params;
               fastcgi_param PATH_INFO $fastcgi_script_name;
               fastcgi_buffer_size 128k;
               fastcgi_buffers 256 4k;
               fastcgi_busy_buffers_size 256k;
               fastcgi_temp_file_write_size 256k;
               fastcgi_intercept_errors on;
       }
       location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
               root /usr/share/;
       }
}
location /phpMyAdmin {
       rewrite ^/* /phpmyadmin last;
}


Niestety trzeba się pobawić z przekierowaniami z serwera-matki we własnym zakresie.

Sprawdźmy teraz czy działa php.

Utwórzmy folder poleceniem:

mkdir -p /var/www/

A w nim plik index.php :

nano index.php

z zawartością:

phpinfo();
?>

Teraz zmiany wirtualnego hosta:

nano /etc/nginx/sites-enabled/default

Ustawiamy poniższe opcje:

root /var/www;
index index.php index.html index.htm;

Dużo niżej trzeba odkomentować wpisy do poniższego stanu:

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }


Restartujemy nginxa w celu zastosowania zmian.
/etc/init.d/nginx restart

Teraz wracamy do serwera matki.

Musimy ustawić kilka przekierowań. Jak wcześniej wspomniałem będę korzystał z innych narzędzi do bazy, więc muszę zrobić odpowiednie przekierowanie:

iptables -t nat -A PREROUTING -i vmbr0 -p tcp -d IP_SERWERA_MATKI --dport 3316 -j DNAT --to-destination 192.168.0.101:3306

Teraz konfiguracja nginxa dla serwer matka:

nano /etc/nginx/sites-enabled/nginx


server {
        #root /usr/share/nginx/www;
        #index index.html index.htm;

        server_name nginx.DOMENA  www.nginx.DOMENA;

        location / {
                proxy_set_header X-Real_IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
                proxy_pass http://192.168.0.101:80/;
        }
        #location /phpmyadmin/ {
        #    proxy_set_header X-Real_IP $remote_addr;
        #    proxy_set_header Host $host;
        #    proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
        #    proxy_pass http://192.168.0.101:80/phpmyadmin/;
        #}
}


Powyższa konfiguracja zawiera też przekierowanie do phpMyAdmin, które należe dokonfigurować na serwerze z nginxem.

Na koniec:

/etc/init.d/nginx restart




W celu wyjaśnienia mojej niechęci i działania z phpMyAdmin.

Problem jaki się u mnie pojawił to po wejściu na stronę nginx.DOMENA/phpmyadmin pokazywało się okienko do logowania. Jednak po zalogowaniu wracało do nginx.DOMENA/index.php, gdzie dopiero po ręcznym wpisaniu nginx.DOMENA/phpmyadmin/index.php potem działało.
Niestety zabrakło mi cierpliwości żeby to zrobić tak na 103% ;)