NGINX-Auto von Walker Cahall
Einführung
Diese Anleitung hilft Ihnen bei der Installation und Konfiguration von NGINX, damit Sie stark frequentierte Websites ausführen und gleichzeitig das hohe Leistungsniveau beibehalten können, das Ihre Kunden erwarten. Wir werden auch zusätzliche Software installieren, um das Beste aus NGINX herauszuholen, daher wird dieser Leitfaden auch die Installation und Konfiguration von MySQL, PHP-APC und PHP-FPM beinhalten.
Warum NGINX? Es gibt eine lange Diskussion darüber, ob Sie Apache oder NGINX verwenden sollten, und obwohl die Gesamtleistung der beiden Webserver-Plattformen ungefähr gleich ist, glänzt das ereignisbasierte Verarbeitungsmodell von NGINX dadurch, dass es einfach, leichtgewichtig und einfach besser im Umgang mit großen ist Anzahl gleichzeitiger Zugriffe auf statische Inhalte, ohne Ihre Serverhardware übermäßig zu belasten.
Was brauchen Sie?
– Sie benötigen einen CentOS 7-Server, der mit einer statischen IP-Adresse konfiguriert ist. Wenn Sie noch keinen Server haben, können Sie unsere VPS-Hosting-Seite besuchen und in weniger als 30 Sekunden einen neuen Server einrichten.
Servervorbereitung
Melden Sie sich zunächst über SSH bei Ihrem CentOS-Server an. Atlantic.Net Cloud-Server werden als minimale Installationen eingerichtet, um zu vermeiden, dass unnötige Pakete installiert und nie verwendet werden. Aus diesem Grund beginnen wir mit der Installation einiger Pakete, die standardmäßig nicht vorhanden sind.
yum install wget
yum install nano
Stellen Sie nach dem Einloggen sicher, dass Ihr Server auf dem neuesten Stand ist.
yum update
Wenn der Server auf dem neuesten Stand ist, können wir den Prozess fortsetzen und NGINX installieren. Da NGINX nicht in den standardmäßigen CentOS-Repositories enthalten ist, verwenden wir das Repo Extra Packages for Enterprise Linux (EPEL). Wir werden im weiteren Verlauf des Prozesses auch Pakete aus den REMI-Repositories verwenden, also lasst uns auch diese herunterladen und installieren.
Sie können die neueste Version von EPEL mit dem folgenden Befehl installieren:
yum install epel-release -y
Bevor wir fortfahren, werden wir auch einen neuen Benutzer und eine neue Gruppe erstellen, die von NGINX und PHP-FPM verwendet werden. Wenn Sie Benutzer und Gruppen mit den Standardeinstellungen belassen, sollte alles weiterhin für Sie funktionieren, aber um das gewisse Extra an Sicherheit zu bieten, werden wir die Änderung vornehmen.
groupadd www-data useradd -g www-data www-data
Während wir an der Servervorbereitung arbeiten, lass uns weitermachen und ein neues Verzeichnis für unseren Webserver einrichten. Normalerweise verwenden die Leute /var/www/html für ihre Sites, aber ich habe mich immer wohler gefühlt, Site-Dateien in /home/domainname.tld/html zu haben , also werden wir das verwenden. Für die exemplarische Vorgehensweise verwenden wir example.tld als unsere Domäne — stellen Sie sicher, dass Sie die fettgedruckten Einträge aktualisieren, damit sie mit der Domäne übereinstimmen, die Sie konfigurieren.
mkdir -p /home/example.tld/html chown -R www-data:www-data /home/example.tld/ chmod -R 0755 /home/example.tld/html
Nachdem wir den Server fertig vorbereitet haben, können wir mit der Installation unserer Softwarepakete fortfahren.
MariaDB unter CentOS 7 installieren und konfigurieren
Installieren Sie zuerst das MariaDB-Serverpaket mit dem folgenden Befehl:
yum install mariadb-server -y
Starten Sie nach der Installation von MariaDB den MariaDB-Dienst und ermöglichen Sie ihm, beim Systemneustart zu starten:
systemctl start mariadb systemctl enable mariadb
Als nächstes sichern Sie die MariaDB-Installation mit dem folgenden Befehl:
mysql_secure_installation
Der sichere MySQL-Installationsprozess führt Sie durch die ersten Sicherheitsänderungen, die für Ihre neue MySQL-Instanz vorgenommen werden sollten.
Hinweis:Wählen Sie ein sicheres Passwort und beschränken Sie den Root-Zugriff nur auf localhost.
mysql_secure_installation
Bearbeiten Sie die /etc/my.cf Datei so, dass sie mit Folgendem übereinstimmt, wodurch der Server darauf beschränkt wird, nur lokale Verbindungen abzuhören:
[mysqld] bind-address = 127.0.0.1 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mariadb/mariadb.pid
Am Ende starten wir alle Dienste neu, also machen wir weiter.
Installieren und konfigurieren Sie NGINX unter CentOS 7
yum install nginx
Nach der Installation müssen wir prüfen, wie viele logische CPU-Kerne auf Ihrem Server verfügbar sind. Führen Sie dazu den folgenden Befehl aus:
grep -c 'model name' /proc/cpuinfo
Notieren Sie sich das Ergebnis, da Sie auch die Einstellung worker_processes sehen werden. Öffnen Sie /etc/nginx/nginx.conf und ersetzen Sie den aktuellen Inhalt durch Folgendes:
user www-data; worker_processes 2; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server_names_hash_bucket_size 64; error_log /var/log/nginx/error_log; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; sendfile on; keepalive_timeout 30; server_tokens off; gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; gzip_http_version 1.1; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; # enabled sites include /etc/nginx/conf.d/*.conf; }
Als nächstes müssen wir unsere Domänenkonfigurationsdatei einrichten. Dazu erstellen Sie eine neue Datei mit dem Namen /etc/nginx/conf.d/example.conf . Achten Sie auch hier darauf, die fettgedruckten Einträge so zu aktualisieren, dass sie mit der Domain übereinstimmen, die Sie hinzufügen.
server { listen 80; server_name example.tld; client_max_body_size 5m; client_body_timeout 60; access_log /var/log/nginx/example.tld_access; error_log /var/log/nginx/example.tld_error error; root /home/example.tld/html/; index index.html index.php; ### SEO sitemaps ### rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last; rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last; ### www directory ### location / { try_files $uri $uri/ /index.php?$args; } ### security ### error_page 403 =404; location ~ /\. { access_log off; log_not_found off; deny all; } location ~ ~$ { access_log off; log_not_found off; deny all; } location ~* wp-admin/includes { deny all; } location ~* wp-includes/theme-compat/ { deny all; } location ~* wp-includes/js/tinymce/langs/.*\.php { deny all; } location /wp-content/ { internal; } location /wp-includes/ { internal; } location ~* wp-config.php { deny all; } ### disable logging ### location = /robots.txt { access_log off; log_not_found off; } location = /favicon.ico { access_log off; log_not_found off; } ### caches ### location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; } location ~* \.(woff|svg)$ { access_log off; log_not_found off; expires 30d; } ### php block ### location ~ \.php?$ { try_files $uri =404; include fastcgi_params; fastcgi_pass unix:/var/run/php-www.socket; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_hide_header X-Powered-By; } }
Da wir den Benutzer geändert haben, unter dem NGINX ausgeführt wird, müssen wir die Eigentümerberechtigungen für die temporären NGINX-Dateien ändern.
chown -R www-data:www-data /var/lib/nginx/
chmod 700 /var/lib/nginx/
Auch hier werden wir am Ende alle Dienste neu starten. Anstatt eine Vollversion von PHP auf dem Server zu installieren, gehen wir weiter zu PHP-FPM – einer alternativen PHP FastCGI-Implementierung.
Installieren und konfigurieren Sie PHP-FPM unter CentOS 7
Hinweis:Nach der Installation müssen wir die Einstellung „cgi.fix_pathinfo“ aktualisieren, um eine potenzielle Schwachstelle zu deaktivieren, die es einem Drittanbieter ermöglichen könnte, ihren eigenen PHP-Code auf Ihrem neuen Server auszuführen.
Installieren Sie zuerst das Remi-Repository mit dem folgenden Befehl:
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Als nächstes installieren Sie PHP-FPM mit anderen erforderlichen Erweiterungen mit dem folgenden Befehl:
yum --enablerepo=remi-php74 install php-fpm php-mysql
nano /etc/php.ini
Ändern
;cgi.fix_pathinfo=1
zu
cgi.fix_pathinfo=0
Öffnen Sie /etc/php-fpm.d/www.conf und ändern Sie die Konfiguration wie folgt:
[www] listen = /var/run/php-www.socket user = www-data group = www-data listen.owner = www-data listen.group = www-data listen.mode = 0660 listen = /var/run/php-www.socket request_slowlog_timeout = 5s slowlog = /var/log/php-fpm/blogcms_log listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 10 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = 4 pm.max_requests = 400 listen.backlog = -1 pm.status_path = /status request_terminate_timeout = 120s rlimit_files = 131072 rlimit_core = unlimited catch_workers_output = yes php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session php_admin_value[error_log] = /var/log/php-fpm/www-error_log php_admin_flag[log_errors] = on
Speichern Sie Ihre Änderungen.
Installieren und konfigurieren Sie PHP-APC unter CentOS 7
Das letzte Teil des Puzzles wird die Installation eines PHP-Beschleunigers sein, um die Ladezeiten statischer Dateien weiter zu verbessern.
yum --enablerepo=remi-php74 install php-pecl-apc
Sobald die Installation abgeschlossen ist, öffnen Sie /etc/php.d/50-apc.ini und ersetzen Sie den Inhalt durch Folgendes:
extension = apc.so apc.enabled=1 apc.shm_segments=1 apc.shm_size=128M apc.num_files_hint=1024 apc.user_entries_hint=4096 apc.ttl=7200 apc.use_request_time=1 apc.user_ttl=7200 apc.gc_ttl=3600 apc.cache_by_default=1 apc.filters apc.mmap_file_mask=/tmp/apc.XXXXXX apc.file_update_protection=2 apc.enable_cli=0 apc.max_file_size=1M apc.stat=1 apc.stat_ctime=0 apc.canonicalize=0 apc.write_lock=1 apc.report_autofilter=0 apc.rfc1867=0 apc.rfc1867_prefix =upload_ apc.rfc1867_name=APC_UPLOAD_PROGRESS apc.rfc1867_freq=0 apc.rfc1867_ttl=3600 apc.include_once_override=0 apc.lazy_classes=0 apc.lazy_functions=0 apc.coredump_unmap=0 apc.file_md5=0 apc.preload_path
Letzter Schliff
Nachdem alles erledigt ist, können wir unsere NGINX-Konfiguration überprüfen, indem wir Folgendes ausführen:
nginx -t
Wenn die Konfiguration mit „nginx:configuration file /etc/nginx/nginx.conf test is successfully“ zurückkommt, können wir alle Dienste starten (oder neu starten) und sicherstellen, dass alle Dienste so eingestellt sind, dass sie beim Systemstart gestartet werden.
systemctl start mariadb ; systemctl enable mariadb systemctl start nginx ; systemctl enable mariadb systemctl start php-fpm ; systemctl enable php-fpm
Als letzten Schritt werden wir überprüfen, ob die Konfiguration funktioniert, indem wir eine info.php-Testseite erstellen und eine Kopie der standardmäßigen index.html in das Home-Verzeichnis unserer Website verschieben. Achten Sie wie zuvor darauf, die fettgedruckten Einträge mit der Domain zu aktualisieren, die Sie einrichten.
cp -R /usr/share/nginx/html/* /home/example.tld/html/
nano /home/example.tld/html/info.php
<?php // Show all information, defaults to INFO_ALL phpinfo(); ?>
Alles testen
Besuchen Sie http://example.tld sollte die Standarddatei index.html anzeigen. Besuchen Sie http://example.tld /info.php sollte Informationen über PHP anzeigen.
Damit haben Sie jetzt einen Server, auf dem alle notwendigen Komponenten laufen, um Ihre Website zu betreiben!
Bitte schauen Sie hier wieder vorbei, um weitere Updates zu erhalten und einen marktführenden virtuellen privaten Server von Atlantic.Net in Betracht zu ziehen.