LINUX.ORG.RU
решено ФорумAdmin

Как закрыть весь сайт Nginx?

 


0

2

Есть задача закрыть корп. сайт от индексации/поиска гугл/яндекс/ботов и прочих, т.е. чтобы внутренние файлы не оказались снаружи, в том числе и index.php При этом по ip ограничить не могу, т.к. сотрудники могут где угодно быть и заходить с разных ip. Первое что пришло на ум, это всю директорию закрыть с помощью пароля вроде

location / {
    auth_basic            "Restricted";
    auth_basic_user_file  /etc/nginx/pass/htpasswd;
}

это спасет от индексации и поиска точечных запросов вроде site.com/index.php или site.com/config/init.php или надо еще закрыть не только корень, но другие location вроде ~ \.php$ ?

так же файл robots.txt

User-agent: *
Disallow: /
надо ли выносить до авторизации?

2ой вопрос конфиг так выглядит, при запросе типа site.com/main.html то все понятно, требуется авторизация. НО меня смущает, что при запросе вроде site.com/config/init.php то идет в обработку php-fpm и пустая страница. Можно ли как то предотвратить обработку до авторизации? полагаю дело в location ~ \.php$ {..}

server {
	listen 80 default_server;
	root /var/www;

	index index.php index.html index.htm;

	server_name site.com;

# этот location переделал под задачу
location / {
    auth_basic            "Restricted";
    auth_basic_user_file  /etc/nginx/pass/htpasswd;
    
    try_files $uri $uri/ =404;
           }

# pass the PHP scripts to FastCGI server 
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
           }

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#	deny all;
#}

}

и 3й вопрос, после авторизации планируется более детальные location прописать например вход в админку только по определенным ip и т.д. это все можно добавлять в конце конфига правильно?

location /admin/ {
  allow   xxx.xxx.xxx.xxx;
  deny    all;
}

Спасибо

Ответ на: комментарий от Jopich1

openvpn отпадает сразу, потому что у сотрудников разные устройства и на каждое устанавливать vpn клиенты совсем не дело.

brainbit
() автор топика
Ответ на: комментарий от Jopich1

Https позже настрою, как с базовым конфигом определюсь auth_basic под корень сайта?

brainbit
() автор топика

Есть задача закрыть корп. сайт от индексации/поиска гугл/яндекс/ботов и прочих

location / {
    auth_basic            "Restricted";
    auth_basic_user_file  /etc/nginx/pass/htpasswd;
}

... так же файл robots.txt

User-agent: *
Disallow: /

Ну, для начала нужно разрешить поисковым роботам читать robots.txt - для robots.txt нужно завести отдельный location без аутентификации. Это закроет проблему индексации.

Ну а всяких других ботов отлавливать по User-Agent и возвращать код 403.

vinvlad ★★
()

... ну и еще - auth-директивы, которые вы прописали в «location /», действуют только на те url-ки, которые обслуживаются этим location-блоком. Доступ к php url-кам в приведенной конфигурации будет осуществляться без аутентификации.

vinvlad ★★
()
Ответ на: комментарий от vinvlad

так сделал, теперь осталось решить

Доступ к php url-кам в приведенной конфигурации будет осуществляться без аутентификации.

это можно как-то прикрыть до авторизации ?

и 3й вопрос по феншую правильно будет? :)

brainbit
() автор топика

Что касается первоначального вопроса, то оставлю запись для будущих поколений.

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

  auth_basic    "Restrict";
  auth_basic_user_file /etc/nginx/pass/htpasswd;

  location ~ \.php$ {
   fastcgi_pass  unix:/run/php/php7.0-fpm.sock;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
   include       fastcgi_params;
  }
 }

brainbit
() автор топика
Ответ на: комментарий от brainbit

Что касается первоначального вопроса, то оставлю запись ...

Контекст директивы auth_basic: http, server, location, limit_except. Поэтому можно всё еще более упростить - просто вынести директивы auth_basic и auth_basic_user_file наружу - в server-блок. А в тех location-блоках, где аутентификация не требуется (/robots.txt и, возможно, статика), просто вставить «auth_basic off;».
Предварительно проверить, конечно...

http://nginx.org/ru/docs/http/ngx_http_auth_basic_module.html

vinvlad ★★
()

...и 3й вопрос, после авторизации планируется более детальные location прописать например вход в админку только по определенным ip и т.д. это все можно добавлять в конце конфига правильно?

НЕТ - не правильно. На эту тему следует внимательно прочитать странички документации:
http://nginx.org/ru/docs/http/request_processing.html
http://nginx.org/ru/docs/http/ngx_http_core_module.html#location

vinvlad ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.