In diesem Handbuch wird das Verfahren zum Installieren und Konfigurieren des Betriebs von zwei Webservern betrachtet, um jeden von ihnen zu nutzen. Das Handbuch impliziert sowohl eine separate Konfiguration als auch eine gegenseitige Konfiguration.
In diesem Artikel wird die Serverkonfiguration mit Apache2, Nginx, ngx_pagespeed, PHP, PHP-FPM, MariaDB und MemCached erläutert .
Nginx
HTTP-Server und Reverse-Proxy, Mail-Proxy und Allzweck-TCP / UDP-Proxy.
Installation
Installieren Sie die Pakete, die zum Verbinden des apt-Repositorys erforderlich sind:
sudo apt install curl gnupg2 ca-certificates lsb-release
Führen Sie den folgenden Befehl aus, um das apt-Repository für die stabile Version von nginx zu verbinden:
echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Jetzt müssen Sie den offiziellen Schlüssel importieren, mit dem apt Pakete authentifiziert:
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Überprüfen Sie, ob der richtige Schlüssel importiert wurde:
sudo apt-key fingerprint ABF5BD827BD9BF62
Die Ausgabe des Befehls sollte den vollständigen Fingerabdruck des Schlüssels enthalten 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
:
pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
uid [ unknown] nginx signing key
Führen Sie die folgenden Befehle aus, um nginx zu installieren:
sudo apt update && sudo apt install nginx
Einrichten
Starten Sie Nginx
systemctl enable nginx && systemctl start nginx
Überprüfen Sie, ob der Benutzer nginx user www-data
:
vi /etc/nginx/nginx.conf
-. http://«IP- ».
«Welcome to nginx!».
PHP-FPM
FastCGI — - . FPM Fastcgi Process Manager.
PHP-FPM:
apt-get install php-fpm
php-fpm :
systemctl enable php7.3-fpm && systemctl start php7.3-fpm
, php-fpm 7.2. — php php -v.
ngx_pagespeed
ngx_pagespeed ( pagespeed) – Nginx, . .
:
sudo apt-get install unzip gcc make g++ libpcre3-dev zlib1g-dev build-essential libpcre3 uuid-dev
, ngx_pagespeed
:
mkdir /etc/nginx/build
cd /etc/nginx/build
nginx:
nginx -v
:
wget -qO - http://nginx.org/download/nginx-1.18.0.tar.gz | tar zxfv -
nginx 1.18
ngx_pagespeed
:
git clone https://github.com/pagespeed/ngx_pagespeed.git
cd ngx_pagespeed/
git checkout tags/latest-stable
cat PSOL_BINARY_URL
psol:
psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz [ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL)
wget ${psol_url}
tar zxf 1.13.35.2-x64.tar.gz
ngx_pagespeed.so
:
cd ../nginx-1.18.0/
./configure --add-dynamic-module=../ngx_pagespeed --with-compat
make
ls objs/*so
ngx_pagespeed.so
:
cd objs
cp ngx_pagespeed.so /etc/nginx/modules
Apache2
.htaccess, , - Apache.
apache php:
apt-get install apache2 libapache2-mod-php
:
vi /etc/apache2/ports.conf
:
Listen 127.0.0.1:8080
# <IfModule ssl_module>
# Listen 443
# </IfModule>
# <IfModule mod_gnutls.c>
# Listen 443
# </IfModule>
8080, 80 NGINX. 443, NGINX.
mpm_event:
a2dismod mpm_event
, apache2 mpm_event. php 7 .
mpm_prefork
:
a2enmod mpm_prefork
php
:
a2enmod php7.3
rewrite
:
a2enmod rewrite
setenvif
:
a2enmod setenvif
:
systemctl enable apache2 && systemctl start apache2
http://«IP- »:8080. .
Server API Apache.
Apache2 Real IP
apache NGINX, IP- 127.0.0.1. , , . remoteip.
:
vi /etc/apache2/mods-available/remoteip.conf
:
<IfModule remoteip_module>
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1/8
</IfModule>
:
a2enmod remoteip
apache:
systemctl restart apache2
http://«IP- », phpinfo.
Apache Environment , REMOTE_ADDR.
PHP
PHP PHP-FPM:
apt install php-xml php-intl php-gd php-curl php-zip php-mbstring php-bcmath php-bz2 php-cgi php-cli php-common php-dba php-dev php-enchant php-gmp php-imap php-interbase php-json php-ldap php-odbc php-opcache php-phpdbg php-pspell php-readline php-recode php-sybase php-tidy php-xmlrpc php-xsl
Mysql (Mariadb)
MariaDB:
apt-get install mariadb-server php-mysql php-mysqli
:
systemctl enable mariadb
systemctl start mariadb
root:
mysqladmin -u root password
apache2:
systemctl restart apache2
:
mysql -uroot -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
# ALL PRIVILEGES: .
# *.* : .
# dbuser - .
# localhost - .
# password - , .
# WITH GRANT OPTION - .
adminer.php
> update user set plugin='' where User='root';
> flush privileges;
> exit
:
sudo systemctl restart mariadb.service
Memcached
Memcached — , -.
, :
apt-get install memcached php-memcached
:
systemctl enable memcached && systemctl start memcached
apache2:
systemctl restart apache2
, memcached PHP, — phpinfo Memcached.
memcached.conf
:
vi /etc/memcached.conf
:
netstat -tap | grep memcached
:
adduser dev
www-data
:
adduser dev www-data
sudo
:
usermod -aG sudo dev
:
mkdir -p /var/www/example.com/{www,tmp}
mkdir -p /var/www/example.com/log/{nginx,apache}
:
chown -R www-data:www-data /var/www/example.com/www
chmod -R 775 /var/www/example.com/www
:
vi /var/www/example.com/www/index.php
:
<?php phpinfo(); ?>
Nginx http
server {
listen 80;
server_name example.com;
set $root_path /var/www/example.com/www;
access_log /var/www/example.com/log/nginx/access_log;
error_log /var/www/example.com/log/nginx/error_log;
root $root_path;
gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss;
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @fallback;
}
location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
try_files $uri $uri/ @fallback;
}
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 7d;
access_log off;
}
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 7d;
access_log off;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
log_not_found off;
access_log off;
}
location / {
try_files /does_not_exists @fallback;
}
}
# PHP
location @fallback {
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://127.0.0.1:8080 /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
access_log off;
}
# PHP-FPM
location @fallback {
index index.php index.html index.htm;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
}
:
ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com
8080, apache, (jpg, png, css ).
apache2
:
vi /etc/apache2/sites-available/example.com.conf
<VirtualHost 127.0.0.1:8080>
Define root_domain example.com
Define root_path /var/www/example.com
ServerName ${root_domain}
ServerAlias www.${root_domain}
DocumentRoot ${root_path}/www
ErrorLog ${root_path}/log/apache/error_log
TransferLog ${root_path}/log/apache/access_log
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.htm
</IfModule>
<Directory /var/www/example.com/www>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>
<IfModule setenvif_module>
SetEnvIf X-Forwarded-Proto https HTTPS=on
</IfModule>
<IfModule php7_module>
php_admin_value upload_tmp_dir ${root_path}/tmp
php_admin_value doc_root ${root_path}
php_value open_basedir ${root_path}:/usr/local/share/smarty:/usr/local/share/pear
php_value post_max_size 512M
php_value upload_max_filesize 512M
php_flag short_open_tag On
</IfModule>
</VirtualHost>
:
ln -s /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-enabled/example.com.conf
:
nginx -t
apachectl configtest
-:
systemctl reload nginx
systemctl reload apache2
https ( )
:
vi /etc/nginx/conf.d/example.com.conf
# , ip .
server {
listen 80;
server_name _ip;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
server_name example.com;
set $root_path /var/www/example.com/www;
access_log /var/www/example.com/log/nginx/access_log;
error_log /var/www/example.com/log/nginx/error_log;
gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss
root $root_path;
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @fallback;
}
location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
try_files $uri $uri/ @fallback;
}
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 7d;
access_log off;
}
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 7d;
access_log off;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
log_not_found off;
access_log off;
}
location / {
try_files /does_not_exists @fallback;
}
}
# PHP
location @fallback {
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://127.0.0.1:8080 /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
access_log off;
}
# PHP-FPM
location @fallback {
index index.php index.html index.htm;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
}
8080, apache, (jpg, png, css ).
Apache2
:
vi /etc/apache2/sites-available/example.com.conf
<VirtualHost 127.0.0.1:8080>
Define root_domain example.com
Define root_path /var/www/example.com
ServerName ${root_domain}
ServerAlias www.${root_domain}
DocumentRoot ${root_path}/www
ErrorLog ${root_path}/log/apache/error_log
TransferLog ${root_path}/log/apache/access_log
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.htm
</IfModule>
<Directory /var/www/example.com/www>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>
<IfModule setenvif_module>
SetEnvIf X-Forwarded-Proto https HTTPS=on
</IfModule>
<IfModule php7_module>
php_admin_value upload_tmp_dir ${root_path}/tmp
php_admin_value doc_root ${root_path}
php_value open_basedir ${root_path}:/usr/local/share/smarty:/usr/local/share/pear
php_value post_max_size 512M
php_value upload_max_filesize 512M
php_flag short_open_tag On
</IfModule>
</VirtualHost>
:
ln -s /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-enabled/example.com.conf
:
nginx -t
apachectl configtest
-:
systemctl reload nginx
systemctl reload apache2
ngx_pagespeed on
PageSpeed
Öffnen Sie die Datei nginx.conf
:
vi /etc/nginx/nginx.conf
Am Anfang hinzufügen:
load_module modules/ngx_pagespeed.so;
Konfiguriert PageSpeed im http
Kontext. Platzieren Sie diese Anweisungen in einer neuen Konfigurationsdatei mit dem Namen dir example.com.conf
in der Datei /etc/nginx/conf.d
.
#
pagespeed MessageBufferSize 10240;
#
pagespeed FileCachePath /var/cache/nginx_pagespeed;
server {
listen 80;
server_name example.com;
set $root_path /var/www/example.com/www;
# pagespeed
pagespeed on;
root $root_path;
#
pagespeed LoadFromFile "http://www.example.com" "/var/www/example.com/www";
access_log /var/www/example.com/log/nginx/access_log;
error_log /var/www/example.com/log/nginx/error_log;
#
pagespeed RewriteLevel CoreFilters;
pagespeed EnableFilters collapse_whitespace,remove_comments;
pagespeed DisableFilters rewrite_images;
gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss;
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @fallback;
}
location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
try_files $uri $uri/ @fallback;
}
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 7d;
access_log off;
}
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 7d;
access_log off;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
log_not_found off;
access_log off;
}
location / {
try_files /does_not_exists @fallback;
}
#
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
}
# PHP
location @fallback {
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://127.0.0.1:8080 /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
access_log off;
}
# PHP-FPM
location @fallback {
index index.php index.html index.htm;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
}
Erstellen Sie einen Ordner zum Speichern des Caches:
mkdir /var/cache/nginx_pagespeed/
chown www-data:www-data /var/cache/nginx_pagespeed/
Wir überprüfen die Nginx-Konfiguration und wenden die Einstellungen an:
nginx -t
nginx -s reload