GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer NGINX sur un serveur CentOS 7

Voiture NGINX par Walker Cahall

Présentation

Ce guide vous aidera à installer et à configurer NGINX afin que vous puissiez exécuter des sites Web à fort trafic tout en maintenant le haut niveau de performances attendu par vos clients. Nous allons également installer des logiciels supplémentaires afin de tirer le meilleur parti de NGINX. Ce guide comprendra donc également l'installation et la configuration de MySQL, PHP-APC et PHP-FPM.

Pourquoi NGINX ? Il y a un long débat sur l'opportunité d'utiliser Apache ou NGINX, et bien que les performances globales des deux plates-formes de serveur Web soient à peu près les mêmes, le modèle de traitement basé sur les événements de NGINX brille en étant simple, léger et tout simplement meilleur pour gérer de grandes quantité d'accès simultanés pour le contenu statique sans trop solliciter le matériel de votre serveur.

De quoi avez-vous besoin ?

– Vous avez besoin d'un serveur CentOS 7 configuré avec une adresse IP statique. Si vous n'avez pas encore de serveur, vous pouvez visiter notre page d'hébergement VPS et créer un nouveau serveur en moins de 30 secondes.

Préparation du serveur

Pour commencer, connectez-vous à votre serveur CentOS via SSH. Les serveurs Atlantic.Net Cloud sont configurés comme des installations minimales afin d'éviter que des packages inutiles ne soient installés et ne soient jamais utilisés. Pour cette raison, nous allons commencer par installer quelques packages qui ne sont pas là par défaut.

yum install wget
yum install nano

Une fois connecté, assurez-vous que votre serveur est entièrement à jour.

yum update

Avec le serveur à jour, nous pouvons continuer le processus et installer NGINX. Étant donné que NGINX n'est pas inclus dans les référentiels CentOS par défaut, nous allons utiliser le référentiel Extra Packages for Enterprise Linux (EPEL). Nous allons également utiliser les packages des référentiels REMI plus loin dans le processus, alors téléchargeons-les et installons-les également.

Vous pouvez installer la dernière version d'EPEL à l'aide de la commande suivante :

yum install epel-release -y

Avant de continuer, nous allons également créer un nouvel utilisateur et un nouveau groupe qui seront utilisés par NGINX et PHP-FPM. Si vous laissez les utilisateurs et les groupes utiliser les paramètres par défaut, tout devrait toujours fonctionner pour vous, mais pour vous aider à fournir ce petit peu de sécurité supplémentaire, nous allons faire le changement.

groupadd www-data
useradd -g www-data www-data

Pendant que nous travaillons sur la préparation du serveur, allons-y et configurons un nouveau répertoire pour notre serveur Web. Normalement, les gens utilisent /var/www/html pour leurs sites, mais j'ai toujours été plus à l'aise d'avoir des fichiers de site dans /home/domainname.tld/html , c'est donc ce que nous allons utiliser. Pour la procédure pas à pas, nous utiliserons example.tld comme notre domaine — assurez-vous de mettre à jour les entrées en gras afin qu'elles correspondent au domaine que vous configurez.

mkdir -p /home/example.tld/html
chown -R www-data:www-data /home/example.tld/
chmod -R 0755 /home/example.tld/html

Maintenant que nous avons fini de préparer le serveur, nous pouvons passer à l'installation de nos packages logiciels.

Installer et configurer MariaDB sur CentOS 7

Tout d'abord, installez le package du serveur MariaDB avec la commande suivante :

yum install mariadb-server -y

Après avoir installé MariaDB, démarrez le service MariaDB et activez-le pour qu'il démarre au redémarrage du système :

systemctl start mariadb
systemctl enable mariadb

Ensuite, sécurisez l'installation de MariaDB avec la commande suivante :

mysql_secure_installation

Le processus d'installation sécurisée de MySQL vous guidera à travers les changements de sécurité initiaux qui doivent être mis en place pour votre nouvelle instance MySQL.

Remarque :Choisissez un mot de passe sécurisé et limitez l'accès root à localhost uniquement.

mysql_secure_installation

Modifiez le /etc/my.cf fichier pour correspondre à ce qui suit, limitant le serveur uniquement pour écouter les connexions locales :

[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

Nous allons redémarrer tous les services à la fin, alors passons à autre chose.

Installer et configurer NGINX sur CentOS 7

yum install nginx

Une fois installé, nous devons vérifier combien de cœurs logiques CPU sont disponibles sur votre serveur. Pour cela, exécutez la commande suivante :

grep -c 'model name' /proc/cpuinfo

Notez le résultat car c'est ce que vous allez voir également dans le paramètre worker_processes. Ouvrez /etc/nginx/nginx.conf et remplacez le contenu actuel par ce qui suit :

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

Ensuite, nous devons configurer notre fichier de configuration de domaine. Cela se fait en créant un nouveau fichier nommé /etc/nginx/conf.d/example.conf . Encore une fois, assurez-vous de mettre à jour les entrées en gras pour qu'elles correspondent au domaine que vous ajoutez.

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

Étant donné que nous avons changé l'utilisateur sous lequel NGINX s'exécute, nous devons modifier les autorisations de propriété pour les fichiers temporaires NGINX.

chown -R www-data:www-data /var/lib/nginx/
chmod 700 /var/lib/nginx/

Encore une fois, nous allons redémarrer tous les services à la fin. Au lieu d'installer une version complète de PHP sur le serveur, nous allons passer à PHP-FPM - une implémentation alternative de PHP FastCGI.

Installer et configurer PHP-FPM sur CentOS 7

Remarque :Après l'installation, nous devons mettre à jour le paramètre "cgi.fix_pathinfo" pour désactiver une vulnérabilité potentielle qui pourrait permettre à un tiers d'exécuter son propre code PHP sur votre nouveau serveur.

Tout d'abord, installez le dépôt Remi avec la commande suivante :

yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Ensuite, installez PHP-FPM avec les autres extensions requises à l'aide de la commande suivante :

yum --enablerepo=remi-php74 install php-fpm php-mysql
nano /etc/php.ini

Modifier

;cgi.fix_pathinfo=1

à

cgi.fix_pathinfo=0

Ouvrez /etc/php-fpm.d/www.conf et modifiez la configuration comme suit :

[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

Enregistrez vos modifications.

Installer et configurer PHP-APC sur CentOS 7

La dernière pièce du puzzle consistera à installer un accélérateur PHP pour améliorer encore les temps de chargement des fichiers statiques.

yum --enablerepo=remi-php74 install php-pecl-apc

Une fois l'installation terminée, ouvrez /etc/php.d/50-apc.ini et remplacez le contenu par ce qui suit :

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

Touches finales

Maintenant que tout est fait, nous pouvons vérifier notre configuration NGINX en exécutant :

nginx -t

Si la configuration revient avec "nginx :le test du fichier de configuration /etc/nginx/nginx.conf est réussi", nous pouvons démarrer (ou redémarrer) tous les services et nous assurer que tous les services sont configurés pour démarrer au démarrage du système.

systemctl start mariadb ; systemctl enable mariadb
systemctl start nginx ; systemctl enable mariadb
systemctl start php-fpm ; systemctl enable php-fpm

Comme dernière étape, nous allons vérifier que la configuration fonctionne en créant une page de test info.php et en déplaçant une copie de l'index.html par défaut vers le répertoire d'accueil de nos sites. Comme précédemment, assurez-vous de mettre à jour les entrées en gras avec le domaine que vous configurez.

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();

?>

Tout tester

Visiter http://example.tld devrait afficher le fichier index.html par défaut. Visiter http://example.tld /info.php devrait afficher des informations sur PHP.

Avec cela, vous disposez maintenant d'un serveur exécutant tous les composants nécessaires pour faire fonctionner votre site Web !

Veuillez revenir ici pour plus de mises à jour et pour envisager un serveur privé virtuel leader du marché d'Atlantic.Net.


Linux
  1. Comment installer et configurer Nginx sur CentOS 8

  2. Configurer le serveur MariaDB sur CentOS

  3. CentOS / RHEL :Comment configurer un serveur DHCP

  4. CentOS / RHEL 5 :Comment installer et configurer le serveur vsftpd

  5. Centos 7 :Configurer le serveur DNS

Comment installer et configurer Subversion (SVN) sur CentOS 7

Comment installer et configurer le serveur Sandstorm sur CentOS 8

Comment installer et configurer Privoxy Server sur CentOS 8

Comment installer Nginx sur CentOS 7 ?

Comment configurer le serveur VNC sur CentOS/RHEL 6

Centos 7 :Configurer le serveur NTP