Задать вопрос
ixley
@ixley

Как в Nginx применить одни настройки сразу ко всем хостам?

Есть сервер, на нём несколько сайтов в sites-available

Хочу запретить доступ к некоторым location и выдавать 404 или 444

Но не хочу писать одно и тоже в каждом файле

Читал интернет, вроде вопрос можно решить через nginx.conf

Пишу там:
server {

location /123 {
 deny all;
 return 444;
}

}


Затем рестарт и релоад nginx

Захожу на первый_адрес/123, ошибка 404
Захожу на второй_адрес/123, вновь 404

Если пишу location в каждый сайт в sites-available отдельно, то всё работает, получаю 444

Что я делаю не так? Инет перерыл, всё перепробовал, но ничего не помогло:-(

default в sites-available
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
		
    }

    location ~ /\.ht {
        deny all;
    }
}


nginx.conf
user www-data;

worker_processes auto;

pid /run/nginx.pid;

include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
}

http {	
	
	client_max_body_size 100M;
	
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	
	server_tokens off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	gzip on;

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


один из сайтов в sites-available
server {

    root /var/www/адрес;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name адрес www.адрес;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/адрес/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/адрес/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}server {
    if ($host = www.адрес) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = адрес) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
	
    server_name адрес www.адрес;
    listen 80;
    return 404; # managed by Certbot

}
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
один раз придется все конфиги дополнить инструкцией include common.conf;

Создать этот файл common.conf и в него помещать общие инструкции.

Как вариант, скрипт написать, который вставит дополнение в каждый конфиг.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы