В современных интернет-приложениях Nginx стал незаменимым компонентом. Независимо от того, используется ли он в качестве статического сервера ресурсов, обратного прокси-сервера или балансировщика нагрузки, высокая производительность и гибкая конфигурация Nginx делают его популярным.
В этой статье будут подробно представлены несколько распространенных сценариев настройки Nginx на простом и понятном языке и на примерах, чтобы помочь начинающим и опытным разработчикам лучше понять и использовать Nginx.
Начнем с самой базовой конфигурации Nginx. Вот очень простой пример конфигурации статического веб-сайта:
server {
listen 80;
server_name alex.com; # Введите свое доменное имя
location / {
root /var/www/wwwroot/myblog; # Каталог хранения статических файлов
index index.html index.htm; # Страница по умолчанию
}
}
listen 80;
:Эта поездка Конфигурация Nginx монитор 80 порт, т.е. HTTP Стандартный порт.server_name
:Указывает имя домена, обрабатываемое текущим блоком сервера.。location /
:Обработать корни URL запрос. В этом блоке местоположения вы определяете запрос /
поведение в то время.root
:Укажите каталог хранения статических файлов。index
:При запросе каталога,Имя файла, возвращаемое по умолчанию.Поскольку сетевая безопасность становится все более важной, настройка веб-сайтов с использованием SSL, который реализует TLS/SSL через HTTP для шифрования связи между клиентами и серверами, стала стандартной практикой. В конфигурации ниже показано, как перенаправить http-трафик (порт 80) на https (порт 443):
# 80 порт Конфигурация, используется для перенаправления на https
server {
listen 80;
server_name alex.com;
rewrite ^ https://$http_host$request_uri? permanent;
}
# https Конфигурация
server {
listen 443 ssl;
server_name alex.com; # Доменное имя, привязанное к сертификату
ssl_certificate /etc/nginx/cert/alex_blog.crt; # Путь сертификата
ssl_certificate_key /etc/nginx/cert/alex_blog.key; # путь к секретному ключу
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # использоватьсоглашение ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /var/www/wwwroot/myblog; # каталог сайта
index index.html index.htm;
}
}
server
Блок действует как трамплин для принятия 80 запрос порта и передача 301 Постоянное перенаправление на https。server
блоки фактически обрабатываются https Запрошено.ssl_certificate
и ssl_certificate_key
указал на SSL Путь к сертификату и закрытому ключу, который необходим для включения https требуется.Обратный прокси-сервер Nginx Еще одна общая особенность — она позволяет пересылать клиентские запросы на другие серверы и возвращать их ответы клиенту. Преимущества этого включают сокрытие истинной природы сервера. IP, балансировка нагрузки, кеширование статического контента и т. д. В следующем примере конфигурации показано, как выполнить сопряжение. api.alex.com
Перенаправить запрос на другой сервер:
server {
listen 80;
# доступ api.alex.com Фактический доступ к https://www.alex.com:5200
server_name api.alex.com;
location / {
proxy_pass https://www.alex.com:5200; #Обратный адрес прокси
proxy_http_version 1.1; #Параметры конфигурации (важно)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
proxy_pass
Указывает адрес прокси-сервера.proxy_set_header
для установки HTTP информация заголовка для обеспечения нормального WebSocket коммуникация.Если вам необходимо специально обрабатывать изображения или другие статические ресурсы, Nginx можно настроить как эффективный сервер изображений. Ниже приведен пример конфигурации для обработки запросов файлов изображений по определенному пути:
#Регулярное выражение,доступ /home/alex/images/ файлы по пути
location ~ (images/).+(gif|jpg|jpeg|png)$ {
expires 24h;
root /home/alex/;#Укажите путь хранения изображений
access_log /home/alex/log/images.log;#Путь к хранилищу журналов
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /home/alex/;#Путь доступа к изображениям
proxy_redirect off;
proxy_set_header Host 127.0.0.1;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://127.0.0.1;#Default 80порт
}
}
images/
начиная с gif
、jpg
、jpeg
、png
В конце пути запроса эти ресурсы кэшируются и регистрируются.При развертывании интерфейсных проектов на сервере вам обычно необходимо настроить веб-сервер для их размещения. Приложение Vue — один из таких случаев. Следующая конфигурация Nginx подходит для развертывания приложений Vue:
server {
listen 80;
server_name h5.alex.com;
error_log /var/log/nginx/frontend-h5.err;
access_log /var/log/nginx/frontend-h5.log;
location / {
root /opt/h5;
# rewrite ^/article/([0-9]+)$ /index.html?id=$1 last;
try_files $uri $uri/ /index.html;
}
location /dapi/ {
proxy_pass http://172.19.0.23:8502/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $http_x_real_ip;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
try_files
Команда используется для последовательного доступа к указанным файлам или каталогам. Если ни один из них не найден, в конечном итоге он будет перенаправлен. /index.html
документ. Это очень важно для одностраничных приложений (SPA), поскольку они полагаются на внешнюю маршрутизацию.Go-Gin — это высокопроизводительная веб-инфраструктура, подходящая для создания эффективных веб-приложений. При развертывании в производственной среде вам может понадобиться Nginx в качестве обратного прокси-сервера и реализовать балансировку нагрузки для повышения доступности приложений и скорости ответа. Следующая конфигурация показывает, как настроить обратный прокси-сервер и балансировку нагрузки:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8081;
server_name api.blog.com;
# Перенаправить все пути к http://127.0.0.1:8000/ Вниз
location / {
proxy_pass http://127.0.0.1:8000/;
}
}
}
Настройка балансировки нагрузки
Используйте gin для запуска двух служб, прослушивающих порт 8001 и порт 8002 соответственно.
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# Установите соответствующий 2 серверные службы
upstream api.blog.com {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 8081;
server_name api.blog.com;
location / {
# Формат: http:// + upstream имя узла
proxy_pass http://api.blog.com/;
}
}
}
upstream
Директива определяет группу серверов, которая может содержать один или несколько серверов. В этом примере два Gin Экземпляры приложений запускаются в 8001 и 8002 порт.server {
listen 80;
server_name www.blog.com;
location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
}
location /frontend {
alias /usr/share/nginx/html/frontend;
index index.html index.htm;
}
location /backend {
alias /usr/share/nginx/html/backend;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
location / {
# Будут пересылаться только запросы без суффикса.
if (!-e $request_filename){
proxy_pass http://localhost:8080;
break;
}
}
В этой статье мы кратко представляем несколько распространенных сценариев настройки Nginx и приводим подробные примеры кода и пояснения. Надеюсь, это поможет вам лучше понять и использовать Nginx. Независимо от того, являетесь ли вы новичком или опытным разработчиком, освоение такого мощного инструмента значительно повысит эффективность вашей разработки и развертывания.