Установка Nginx на Ubuntu 24.04.1
Установка
Обновляем информацию о пакетах репозитория:
sudo apt-get update
Устанавливаем Nginx:
sudo apt install nginx
Обычно все устанавливается без вопросов, но бывает иное. Чтобы проверить, как работает сервис, выполняем:
sudo systemctl status nginx
В моем случае что-то пошло не по плану:
× nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Thu 2024-11-07 21:09:47 +07; 53s ago
Docs: man:nginx(8)
Process: 4159 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 4161 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
CPU: 24ms
ноя 07 21:09:45 home nginx[4161]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
ноя 07 21:09:45 home nginx[4161]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
ноя 07 21:09:46 home nginx[4161]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
ноя 07 21:09:46 home nginx[4161]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
ноя 07 21:09:46 home nginx[4161]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
ноя 07 21:09:46 home nginx[4161]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
ноя 07 21:09:47 home nginx[4161]: nginx: [emerg] still could not bind()
ноя 07 21:09:47 home systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
ноя 07 21:09:47 home systemd[1]: nginx.service: Failed with result 'exit-code'.
ноя 07 21:09:47 home systemd[1]: Failed to start nginx.service - A high performance web server and a reverse proxy server.
80 порт занят, из-за этого NGinx не смог запуститься.
Not attempting to start NGINX, port 80 is already in use.
Это сообщение, если возникла проблемы может быть ещё в момент установки Nginx. Обычно порт держит Apache2, но всегда нужно проверить это. Для этого выполняем:
sudo netstat -tulpn | grep :80
У меня ответ был очевидным, порт 80 слушается Apache2 (хотя я его не ставил...):
tcp6 0 0 :::80 :::* LISTEN 1246/apache2
Так как в моем случае мне нужна связка NGinx + Apache, Apache удалять не будем, но порт освободить нужно. Для этого идём в настройку портов Apache:
sudo nano /etc/apache2/ports.conf
Приводим файл к следующему виду:
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 8080
#<IfModule ssl_module>
# Listen 443
#</IfModule>
#
#<IfModule mod_gnutls.c>
# Listen 443
#</IfModule>
Здесь мы указали слушать Apache порт 8080, и отключили прослушивание дополнительных портов (в нашем случае 443), если установлены модули ssl_module
и mod_gnutls.c
. Сохраняем, выходим, перезапускаем Apache2, убеждаемся, что он работает:
sudo systemctl restart apache2
sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-11-07 21:24:55 +07; 5s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 4339 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 4343 (apache2)
Tasks: 6 (limit: 9346)
Memory: 10.5M (peak: 10.9M)
CPU: 83ms
CGroup: /system.slice/apache2.service
├─4343 /usr/sbin/apache2 -k start
├─4345 /usr/sbin/apache2 -k start
├─4346 /usr/sbin/apache2 -k start
├─4347 /usr/sbin/apache2 -k start
├─4348 /usr/sbin/apache2 -k start
└─4349 /usr/sbin/apache2 -k start
Запускаем Nginx, убеждаемся, что сервис работает:
sudo systemctl start nginx
sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-11-07 21:26:16 +07; 4s ago
Docs: man:nginx(8)
Process: 4363 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 4365 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 4366 (nginx)
Tasks: 5 (limit: 9346)
Memory: 3.6M (peak: 4.1M)
CPU: 33ms
CGroup: /system.slice/nginx.service
├─4366 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─4367 "nginx: worker process"
├─4368 "nginx: worker process"
├─4369 "nginx: worker process"
└─4370 "nginx: worker process"
Проблема решена.
Настройки
Включаем автозапуск Nginx:
sudo systemctl enable nginx
Если используем UFW, проверяем, открыты ли 80 и 443 порты:
sudo ufw status
Status: active
To Action From
-- ------ ----
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
Отредактируем основной конфигурационный файл:
sudo nano /etc/nginx/nginx.conf
В блоке http
находим и изменяем или создаем директиву client_max_body_size 20M;
- значение устанавливаем максимальный лимит на размер загружаемого файла, в данном случае 20 мегабайт.
После сохранения проверяем конфигурацию sudo nginx -t
, и конечно, перезагружаем сервер.
Файлы хостов
Создаем файл с настройками хоста, your_domain_name
заменить на свой хост:
sudo nano /etc/nginx/sites-available/your_domain_name.conf
Скелет создания файла хоста для проксирования трафика на сервер Apache. your_domain_name
и your_www_user
заменить:
server {
listen 80;
server_name your_domain_name;
access_log /home/your_www_user/data/logs/nginx.cloud.access.log;
error_log /home/your_www_user/data/logs/nginx.cloud.error.log;
#if ( $scheme = "http" ) {
# rewrite ^/(.*)$ https://$host/$1 permanent; #301 redirect
#}
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
index index.php index.html index.htm;
root /var/www/html;
client_max_body_size 256M;
location / {
proxy_pass http://127.0.0.1:8080;
include proxy_params;
}
location @backend {
proxy_pass http://127.0.0.1:8080;
include proxy_params;
}
location ~* \.(html|htm|css|xml|rss|gif|jpeg|jpg|js|atom|mml|jad|wml|htc|png|tif|tiff|wbmp|ico|jng|bmp|jar|war|ear|hqx|doc|pdf|ps|eps|ai|rtf|xls|ppt|wmlc|xhtml|cco|jardiff|jnlp|run|>
try_files $uri @backend;
expires max;
log_not_found off;
}
location ~ /\.ht {
deny all;
}
}
Проверяем конфигурацию:
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Создаём симлинк, делая конфигурацию доступной для применения your_domain_name
заменить:
sudo ln -s /etc/nginx/sites-available/your_domain_name.conf /etc/nginx/sites-enabled/
Перезапускаем Nginx и проверяем его работу:
sudo systemctl restart nginx