Сервис настройки NGINX
Заполните форму и сервис подготовит конфигурационные файлы веб-сервера NGINX для вашего кейса – веб-сервер, сервер для Django или Node.js, сервер для CMS WordPress, Joomla, Drupal. Настройка возможна для одного или нескольких доменов. Готовые файлы конфигурации можно скачать или выполнить одну команду на сервере для автоматического обновления.
Конфигурация для каждого сайта
Глобальная конфигурация
Примените настройки конфигурации для запуска NGINX с Docker
Обновляет пользователя NGINX на nginx
и pid на /var/run/nginx.pid
Настройка
Скачать сгенерированную конфигурацию: nginxconfig.io-example.com.tar.gz
и загрузить её на Ваш сервер/etc/nginx
директория.или, Скопируйте Base64 c сжатой конфигурацией, вставьте это в Вашу командную строку на сервере и запустите.
Перейдите в папку конфигурации NGINX на Вашем сервере:
cd /etc/nginx
Сделайте резервную копию Вашей нынешней NGINX конфигурации:
tar -czvf nginx_$(date +'%F_%H-%M-%S').tar.gz nginx.conf sites-available/ sites-enabled/ nginxconfig.io/
Извлеките архив с новой конфигурацией с помощью использованием tar:
tar -xzvf nginxconfig.io-example.com.tar.gz
Сгенерируйте ключи Диффи-Хеллмана, запустив следующую команду на своем сервере:
openssl dhparam -out /etc/nginx/dhparam.pem 2048
Создайте директорию хранения ACME-challenge (для Let's Encrypt):
mkdir -p /var/www/_letsencrypt
chown www-data /var/www/_letsencrypt
Закомментируйте директивы, связанные с SSL в конфигурации:
sed -i -r 's/(listen .*443)/\1; #/g; s/(ssl_(certificate|certificate_key|trusted_certificate) )/#;#\1/g; s/(server \{)/\1\n ssl off;/g' /etc/nginx/sites-available/example.com.conf
Перезагрузите свой NGINX сервер:
sudo nginx -t && sudo systemctl reload nginx
Получите SSL сертификат Let's Encrypt используя Certbot:
certbot certonly --webroot -d example.com --email info@example.com -w /var/www/_letsencrypt -n --agree-tos --force-renewal
Раскомментируйте директивы, связанные с SSL в конфигурации:
sed -i -r -z 's/#?; ?#//g; s/(server \{)\n ssl off;/\1/g' /etc/nginx/sites-available/example.com.conf
Перезагрузите свой NGINX сервер:
sudo nginx -t && sudo systemctl reload nginx
Настройте Certbot, чтобы перезагрузить NGINX, когда сертификаты успешно обновятся:
echo -e '#!/bin/bash\nnginx -t && systemctl reload nginx' | sudo tee /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh
sudo chmod a+x /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh
Время запуска! 🎉
Перезагрузите NGINX, чтобы запустить его с новой конфигурацией:
sudo nginx -t && sudo systemctl reload nginx
Файлы конфигурации
/etc/nginx/nginx.conf
# Generated by nginxconfig.io
# https://www.reg.ru/web-tools/nginx-config-generator
user www-data;
pid /run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 65535;
# Load modules
include /etc/nginx/modules-enabled/*.conf;
events {
multi_accept on;
worker_connections 65535;
}
http {
charset utf-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
log_not_found off;
types_hash_max_size 2048;
types_hash_bucket_size 64;
client_max_body_size 16M;
# MIME
include mime.types;
default_type application/octet-stream;
# Logging
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
# SSL
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Diffie-Hellman parameter for DHE ciphersuites
ssl_dhparam /etc/nginx/dhparam.pem;
# Mozilla Intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
resolver_timeout 2s;
# Load configs
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
/etc/nginx/sites-available/example.com.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
set $base /var/www/example.com;
root $base/public;
# SSL
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
# security
include nginxconfig.io/security.conf;
# index.php
index index.php;
# index.php fallback
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# additional config
include nginxconfig.io/general.conf;
# handle .php
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php-fpm.sock;
include nginxconfig.io/php_fastcgi.conf;
}
}
# subdomains redirect
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name *.example.com;
# SSL
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
return 301 https://example.com$request_uri;
}
# HTTP redirect
server {
listen 80;
listen [::]:80;
server_name .example.com;
include nginxconfig.io/letsencrypt.conf;
location / {
return 301 https://example.com$request_uri;
}
}
/etc/nginx/nginxconfig.io/letsencrypt.conf
# ACME-challenge
location ^~ /.well-known/acme-challenge/ {
root /var/www/_letsencrypt;
}
/etc/nginx/nginxconfig.io/security.conf
# security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# . files
location ~ /\.(?!well-known) {
deny all;
}
/etc/nginx/nginxconfig.io/general.conf
# favicon.ico
location = /favicon.ico {
log_not_found off;
access_log off;
}
# robots.txt
location = /robots.txt {
log_not_found off;
access_log off;
}
# assets, media
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;
}
# svg, fonts
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 7d;
access_log off;
}
# gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
/etc/nginx/nginxconfig.io/php_fastcgi.conf
# 404
try_files $fastcgi_script_name =404;
# default fastcgi_params
include fastcgi_params;
# fastcgi settings
fastcgi_index index.php;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
# fastcgi params
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/";
- Что такое NGINX?
-
Nginx ― это программное обеспечение с открытым исходным кодом или по-другому open-source. Используется для создания веб-сервера.
С помощью Nginx можно решить множество задач:
— снижение нагрузки на сервер при обработке запросов на файлы;
— снижение нагрузки на приложения за счёт кеширования;
— балансировка нагрузки, тем самым повысить отказоустойчивость сервера;
— обрабатывать сотни тысяч единовременных подключений на одном физическом сервере с Nginx;
— проводить аутентификацию пользователей.Nginx работает практически на всех OC Linux и Unix подобных системах, а также на некоторых версиях Windows.
- Как устроен конфигурационный файл?
-
Конфигурационный файл Nginx (nginx config) — файл, в котором задаётся количество рабочих процессов и определяется вся работа Nginx. По умолчанию, конфиг Nginx называется
nginx.conf
и располагается в каталоге/etc/nginx
,/usr/local/nginx/conf
, или/usr/local/etc/nginx
.Конфигурация Nginx состоит из настроечных директив. Каждая директива должна размещаться в отдельной строке, а текст директивы должен завершаться точкой с запятой. В качестве разделителя между элементами директивы можно использовать пробел или знак табуляции. Директива выглядит так:
Имя Директивы Значение [Значение 2] [Значение 3...];
- Как настроить Nginx для раздачи статического содержимого?
-
Одна из важных задач Nginx при настройке сайта — раздача файлов, таких как изображения или статические HTML-страницы. За счёт возможности Nginx быстро отдавать файлы, часто используют связку Nginx и какого-то другого веб-сервера (например, Apache) для того, чтобы Nginx сразу отдавал файлы, а запросы, требующие дополнительной обработки (например, к скриптам PHP), передавал другому веб-серверу путем проксирования (proxy_pass) или к приложению FastCGI.
Настройка правил обработки запросов в Nginx происходит через
location { }
в конфигурационном файле. - Как связать Nginx с приложением FastCGI?
-
Программу Nginx используют для перенаправления запросов на FastCGI-серверы, на которых исполняются приложения, созданные с использованием языков программирования и фреймворков, например, PHP, Python или Django.
Для работы с проксируемым сервером нам понадобится директева fastcgi_pass и fastcgi_param для настройки параметров, передаваемых FastCGI-серверу.
Конфигурация будет выглядеть примерно так:
server { location / { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
- Как настроить прокси-сервер на Nginx?
-
Настройка сервера Nginx — одно из самых частых применений программы. Давайте настроим простой сервер, который будет обслуживать запросы изображений из локального каталога и отправлять все остальные запросы на проксируемый сервер.
Сначала откройте конфиг nginx и добавьте ещё один блок
server
:server { listen 8080; root /data/up1; location / { } }
Далее, используйте видоизмените конфигурацию сервера — в первый блок
location
добавьте директивуproxy_pass
, указав протокол, имя и порт проксируемого сервера в качестве параметра (в нашем случае это http://localhost:8080):server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
- Можно ли настроить Nginx в качестве обратного прокси для Apache?
-
Nginx обрабатывает данные быстро, но не работает с PHP. Часто Nginx используется в связке с программным пакетом PHP-FPM, а популярные CMS, например, WordPress, заточены под работу с Apache. Подробнее о настройке программ читайте в этой инструкции.
- Как установить Nginx на Ubuntu?
-
Установка Nginx на Ubuntu очень проста — используйте менеджер пакетов apt для его установки. Чтобы установить Nginx введите команды:
sudo apt update sudo apt install nginx
В результате Nginx и другие необходимые компоненты для его работы пакеты будут установлены на ваш сервер.
- Как настроить редирект домена на HTTPS в Nginx?
-
Nginx — мощный инструмент для перенаправления и управления веб-трафиком. Его можно легко настроить для проксирования запросов или веб-трафика HTTP на зашифрованный HTTPS-сервер с SSL.
Если используете Ubuntu, найдите и откройте файл конфигурации в текстовом редакторе, используя команду:
sudo nano /etc/nginx/sites-available/server.conf
Далее вставьте этот код:
server { listen 80 default_server; server_name _; return 301 https://$host$request_uri; }
После завершения редактирования, сохраните файл и выйдите. Затем перезапустите службу Nginx с помощью следующей команды:
sudo service nginx restart