GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare NGINX su un server CentOS 7

Auto NGINX di Walker Cahall

Introduzione

Questa procedura ti aiuterà a installare e configurare NGINX in modo da poter eseguire siti Web ad alto traffico mantenendo l'alto livello di prestazioni che i tuoi clienti si aspettano. Installeremo anche software aggiuntivo per ottenere il massimo da NGINX, quindi questa guida includerà anche l'installazione e la configurazione di MySQL, PHP-APC e PHP-FPM.

Perché NGINX? C'è un lungo dibattito avanti e indietro sull'opportunità di utilizzare Apache o NGINX, e mentre le prestazioni complessive delle due piattaforme di server Web sono più o meno le stesse, il modello di elaborazione basato sugli eventi di NGINX brilla per essere semplice, leggero e semplicemente migliore nella gestione di grandi dimensioni quantità di hit simultanee per contenuto statico senza gravare eccessivamente sull'hardware del server.

Di cosa hai bisogno?

– È necessario un server CentOS 7 configurato con un indirizzo IP statico. Se non disponi già di un server, puoi visitare la nostra pagina Hosting VPS e avviare un nuovo server in meno di 30 secondi.

Preparazione del server

Per iniziare, accedi al tuo server CentOS tramite SSH. I server Atlantic.Net Cloud sono configurati come installazioni minime per evitare che pacchetti non necessari vengano installati e mai utilizzati. Per questo motivo, inizieremo installando un paio di pacchetti non presenti per impostazione predefinita.

yum install wget
yum install nano

Una volta effettuato l'accesso, assicurati che il tuo server sia completamente aggiornato.

yum update

Con il server aggiornato, possiamo continuare il processo e installare NGINX. Poiché NGINX non è incluso nei repository CentOS predefiniti, utilizzeremo il repository EPEL (Extra Packages for Enterprise Linux). Utilizzeremo anche i pacchetti dai repository REMI nel processo, quindi scarichiamo e installiamo anche quello.

Puoi installare l'ultima versione di EPEL usando il seguente comando:

yum install epel-release -y

Prima di andare avanti, creeremo anche un nuovo utente e gruppo che verrà utilizzato da NGINX e PHP-FPM. Se lasci utenti e gruppi utilizzando le impostazioni predefinite, tutto dovrebbe comunque funzionare per te, ma per contribuire a fornire un po' di sicurezza in più apporteremo la modifica.

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

Mentre stiamo lavorando alla preparazione del server, andiamo avanti e impostiamo una nuova directory per il nostro server web. Normalmente le persone usano /var/www/html per i loro siti, ma sono sempre stato più a mio agio con i file del sito in /home/domainname.tld/html , quindi è quello che useremo. Per la procedura dettagliata, utilizzeremo example.tld come nostro dominio, assicurati di aggiornare le voci in grassetto in modo che corrispondano al dominio che stai configurando.

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

Ora che abbiamo finito di preparare il server, possiamo passare all'installazione dei nostri pacchetti software.

Installa e configura MariaDB su CentOS 7

Per prima cosa, installa il pacchetto del server MariaDB con il seguente comando:

yum install mariadb-server -y

Dopo aver installato MariaDB, avvia il servizio MariaDB e abilitalo all'avvio al riavvio del sistema:

systemctl start mariadb
systemctl enable mariadb

Quindi, proteggi l'installazione di MariaDB con il seguente comando:

mysql_secure_installation

Il processo di installazione sicura di MySQL ti guiderà attraverso le modifiche iniziali alla sicurezza che dovrebbero essere messe in atto per la tua nuova istanza MySQL.

Nota:scegli una password sicura e limita l'accesso come root solo a localhost.

mysql_secure_installation

Modifica /etc/my.cf file in modo che corrisponda a quanto segue, limitando il server solo ad ascoltare le connessioni locali:

[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

Alla fine riavvieremo tutti i servizi, quindi andiamo avanti.

Installa e configura NGINX su CentOS 7

yum install nginx

Una volta installato, dobbiamo verificare quanti core logici della CPU sono disponibili sul tuo server. Per fare ciò, esegui il seguente comando:

grep -c 'model name' /proc/cpuinfo

Prendi nota del risultato poiché questo è ciò che vedrai anche l'impostazione worker_processes. Apri /etc/nginx/nginx.conf e sostituisci il contenuto corrente con il seguente:

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

Successivamente, dobbiamo impostare il nostro file di configurazione del dominio. Questo viene fatto creando un nuovo file chiamato /etc/nginx/conf.d/example.conf . Ancora una volta, assicurati di aggiornare le voci in grassetto in modo che corrispondano al dominio che stai aggiungendo.

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

Poiché abbiamo modificato l'utente con cui viene eseguito NGINX, è necessario modificare le autorizzazioni di proprietà per i file temporanei di NGINX.

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

Ancora una volta, alla fine riavvieremo tutti i servizi. Andando avanti, invece di installare una versione completa di PHP sul server, passeremo a PHP-FPM, un'implementazione alternativa di PHP FastCGI.

Installa e configura PHP-FPM su CentOS 7

Nota:dopo l'installazione, è necessario aggiornare l'impostazione "cgi.fix_pathinfo" per disabilitare una potenziale vulnerabilità che potrebbe consentire a terze parti di eseguire il proprio codice PHP sul nuovo server.

Innanzitutto, installa il repository Remi con il seguente comando:

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

Quindi, installa PHP-FPM con altre estensioni richieste usando il seguente comando:

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

Cambia

;cgi.fix_pathinfo=1

a

cgi.fix_pathinfo=0

Apri /etc/php-fpm.d/www.conf e modificare la configurazione come segue:

[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

Salva le modifiche.

Installa e configura PHP-APC su CentOS 7

L'ultimo pezzo del puzzle sarà l'installazione di un acceleratore PHP per migliorare ulteriormente i tempi di caricamento dei file statici.

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

Una volta completata l'installazione, apri /etc/php.d/50-apc.ini e sostituisci il contenuto con il seguente:

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

Tocchi finali

Ora che tutto è fatto, possiamo verificare la nostra configurazione NGINX eseguendo:

nginx -t

Se la configurazione ritorna con "nginx:il test del file di configurazione /etc/nginx/nginx.conf è riuscito", possiamo avviare (o riavviare) tutti i servizi e assicurarci che tutti i servizi siano impostati per l'avvio all'avvio del sistema.

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

Come passaggio finale, verificheremo che la configurazione funzioni creando una pagina di test info.php e spostando una copia di index.html predefinito nella home directory dei nostri siti. Come prima, assicurati di aggiornare le voci in grassetto con il dominio che stai configurando.

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

?>

Testare tutto

Visitando http://example.tld dovrebbe mostrare il file index.html predefinito. Visitando http://example.tld /info.php dovrebbe mostrare informazioni su PHP.

Con ciò, ora hai un server che esegue tutti i componenti necessari per eseguire il tuo sito Web!

Ricontrolla qui per ulteriori aggiornamenti e per prendere in considerazione un server privato virtuale leader di mercato di Atlantic.Net.


Linux
  1. Come installare e configurare Nginx su CentOS 8

  2. Configura il server MariaDB su CentOS

  3. CentOS / RHEL:come configurare un server DHCP

  4. CentOS / RHEL 5:Come installare e configurare il server vsftpd

  5. Centos 7 :Configura il server DNS

Come installare e configurare Subversion (SVN) su CentOS 7

Come installare e configurare Sandstorm Server su CentOS 8

Come installare e configurare Privoxy Server su CentOS 8

Come installare Nginx su CentOS 7?

Come configurare il server VNC su CentOS/RHEL 6

Centos 7 :Configura il server NTP