.htaccess + nginx.conf

Просмотров 1468
Сложность:

Веб-серверы Apache и nginx позволяют достаточно просто настроить базовые параметры своей работы. Начнём с Apache.

.htaccess и конфиг Apache2

Основным файлом настройки является apache2.conf, который в Ubuntu хранится в папке /etc/apache2/.

Пример настроек внутри файла apache2.conf:

KeepAlive On #включаем использование постоянного соединения между сервером и клиентом
MaxKeepAliveRequests 100 #максимальное количество запросов внутри одного соединения
KeepAliveTimeout 30 #через сколько секунд после последнего запроса сервер держит соединение
Protocols h2 h2c http/1.1 #версии протокола HTTP по которым принимает запросы веб-сервер
AccessFileName .htaccess #название файла, который позволяет делать дополнительные настройки
Listen *:80 #слушаем 80 порт по умолчанию
<IfModule ssl_module> #если включен модуль ssl, то слушаем порт 443
  	Listen *:443
</IfModule>

Индивидуальные настройки по каждому сайту лучше производить уже в конкретных папках внутри /etc/apache2/sites-available/папка-сайта/название-домена.conf.

Важно не забыть установить права доступа на папки и файлы внутри каталога с сайтом. Папки - 755, файлы 644.

Пример такого файла:

#первый блок будет делать редирект на https версию сайта с помощью настроек в файле .htaccess
<VirtualHost *:80> #номер порта, к которому применяются настройки ниже, 80 порт = http
	ServerName site.ru #имя домена
	DocumentRoot /var/www/site.ru/html #ссылка на папку, где хранится сайт
	<Directory /var/www/site.ru/html> #настройки доступа к папке, где хранится сайт
      	  	Options Indexes FollowSymLinks MultiViews
      	  	AllowOverride All
      	  	Order allow,deny
      	  	allow from all
	</Directory>
	ErrorLog ${APACHE_LOG_DIR}/error.log #ссылка на файл лога с ошибками
</VirtualHost>

<VirtualHost *:443> #номер порта, к которому применяются настройки ниже, 443 порт = https
	ServerName site.ru
	ServerAdmin admin@site.ru #почта администратора
	SSLEngine on #включаем использование ssl-сертификата
	SSLCertificateFile "/root/site.crt" #путь к файлу с сертификатом
	SSLCertificateKeyFile "/root/site.key" #путь к файлу с ключем сертификата
	DocumentRoot /var/www/site.ru/html
	<Directory /var/www/site.ru/html>
      	  	Options Indexes FollowSymLinks MultiViews
      	  	AllowOverride All
      	  	Order allow,deny
      	  	allow from all
  	</Directory>
	ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>

И самым последним по уровню файлом настройки (после того, как вы включите возможность его использования) является .htaccess. Важно, что на виртуальном хостинге у вас не будет доступа к 2 файлам, которые показаны выше.

Содержимое .htaccess уже зависит от конкретных CMS/фреймворков. То есть одна и та же функция на Wordpress и Modx не обязательно будет прописываться в .htaccess одинаково.

Если упростить, то .htaccess вам может понадобиться для настройки всяческих редиректов, перехода на https протокол с SSL-сертификатом и ограничения доступов.

Пример .htaccess для Modx:

RewriteEngine On #включаем ЧПУ, или дружественные URL, как их называет сам Modx
RewriteBase /

RewriteCond %{ENV:HTTPS} !on #используем https протокол
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] #используем 301 редирект

RewriteCond %{HTTP_HOST} . #блок с редиректом с www на без www
RewriteCond %{HTTP_HOST} !^site\.ru [NC]
RewriteRule (.*) https://site.ru/$1 [R=301,L]

Конфигурация nginx

Основным файлом настройки является nginx.conf, который в Ubuntu хранится в папке /etc/nginx/. Аналогичным образом там хранятся основные настройки сразу для всех сайтов. А уже в папке /etc/nginx/sites-available/ хранятся настройки для конкретных сайтов.

user www-data; #пользователь, который запускает веб-сервер
worker_processes auto; #количество процессов, можно установить вручную = количество ядер процессора
pid /run/nginx.pid; #id процесса веб-сервера
include /etc/nginx/modules-enabled/*.conf; #подключение модулей nginx

# ниже стандартные настройки, аналогичные Apache

events {
	worker_connections 768;
	multi_accept on;
}

http {
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 30;
	types_hash_max_size 2048;
	map_hash_bucket_size 64;
	server_names_hash_bucket_size 64;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #подключаем ssl
	ssl_prefer_server_ciphers on;

	access_log /var/log/nginx/access.log; #логи
	error_log /var/log/nginx/error.log;

	gzip on; #включаем сжатие gzip

	include /etc/nginx/conf.d/*.conf; 
	include /etc/nginx/sites-enabled/*; #подключаем файлы из внутренних папок для индивидуальной настройки
}

И последний пример - это файл настройки внутри папки /etc/nginx/sites-available/ для конкретного сайта, где nginx выступает в качестве reverse proxy для nuxt.js приложения.

#всё разбито по портам и именам сайта. То есть сервер слушает 80 и 443 и принимает адреса с www и без www.
#цель настроек - со всех второстепенных версий сайта сделать корректный редирект на основную.
server { #редирект с http://site.ru на https://site.ru
 listen        80;
 server_name site.ru;
 return 301 https://site.ru$request_uri;
}
server { #редирект с http://www.site.ru на https://site.ru
  listen       80;
  server_name www.site.ru;
  return 301 https://site.ru$request_uri;
}
server {
  listen     443 ssl http2; #используем вторую версию http и ssl сертификат
  server_name   site.ru;
  ssl on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_certificate /etc/ssl/certs/site.crt; #путь к сертификату
  ssl_certificate_key /etc/ssl/certs/site.key; #путь к ключу сертификата
  ssl_prefer_server_ciphers on;
  gzip on; #включаем сжатие gzip
  gzip_types   text/plain application/xml text/css application/javascript;
  gzip_min_length 1000;
  rewrite ^/(.*)/$ /$1 permanent;

location / {
    expires 31557600; #указываем период кэширования статичных файлов в секундах
    proxy_redirect           off;
    proxy_set_header Host        $host; #set_header устанавливают заголовки ответа сервера
    proxy_set_header X-Real-IP     $remote_addr;
    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout     1m;
    proxy_connect_timeout    1m;
    proxy_pass             http://localhost:3000; #путь с портом, на которых запущено приложение nuxt.js
 }
}
server {
  listen     443 ssl; #для редиректа с https://www.site.ru на https://site.ru
  server_name www.site.ru;
  ssl on; #без подключения ssl сертификата будет выдаваться ошибка
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_certificate /etc/ssl/certs/site.crt;
  ssl_certificate_key /etc/ssl/certs/site.key;
  ssl_prefer_server_ciphers on;
  return 301 https://site.ru$request_uri ;
}

Это обзорная статья, которая показывает примерный принцип настройки веб-серверов. Для более тщательной настройки рекомендую изучать полноценные материалы и руководства на специализированных сайтах. Данная же статья - это входной билет в конфигурацию веб-серверов.

Не забывайте перезагружать процессы веб-серверов после обновления конфигурационных файлов.

Цифры

Установка и настройка веб-сервера и базового ПО на VDS/выделенный сервер - от 30 минут до 2 часов.

Автор: Александр Дергунов
Дата публикации: 20.12.2019 г.
Поделиться:

Настройка сервера

Доменное имя
1130 просмотров1130
Настройка сервера
Выбор и покупка, привязка к хостингу, поддомены.
Сложность:
Доменное имя - видео
Хостинг
1367 просмотров1367
Настройка сервера
Выбор и покупка, разновидности: виртуальный, VDS, статический.
Сложность:
Хостинг - видео
Веб-сервер
2302 просмотров2302
Настройка сервера
Основы HTTP-сервера, запросы, методы. Apache и nginx.
Сложность:
Веб-сервер - видео
Доступы к сайту
1270 просмотров1270
Настройка сервера
Как не потерять доступ к своему сайту, перечень доступов
Сложность:
Доступы к сайту - видео
SSL сертификат
1036 просмотров1036
Настройка сервера
Выбор и покупка сертификата, разновидности, установка.
Сложность:
SSL сертификат - видео
Ответ сервера
1686 просмотров1686
Настройка сервера
Коды ответа сервера, редиректы, заголовки.
Сложность:
Ответ сервера - видео
.htaccess + nginx.conf
1469 просмотров1469
Настройка сервера
Настройка конфигурационных файлов Apache и nignx.
Сложность:
Перенос сайта
965 просмотров965
Настройка сервера
Перенос на другой домен, хостинг или CMS.
Сложность:
Перенос сайта - видео
Базовые технические знания
767 просмотров767
Настройка сервера
Что нужно изучить SEO'шнику и интернет-маркетологу в первую очередь.
Сложность:
Главная страница энциклопедии
metrika