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.