День добрый. Прошу помощи.Имеется nginx, обслуживающий облако nextcloud. В облаке создан общий ресурс с доступом по ссылке cloud.domain.ru/s/AR1kS7om9Utk339
Ресурс этот доступен:192.168.2.166 - - [10/Dec/2019:10:45:34 +0400] "GET / HTTP/2.0" 302 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
192.168.2.166 - - [10/Dec/2019:10:45:34 +0400] "GET /login HTTP/2.0" 200 3918 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
192.168.2.166 - - [10/Dec/2019:10:45:34 +0400] "GET /apps/theming/image/logo?useSvg=1&v=36 HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
192.168.2.166 - - [10/Dec/2019:10:45:35 +0400] "GET /apps/theming/image/logo?v=36 HTTP/2.0" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
192.168.2.166 - - [10/Dec/2019:10:46:52 +0400] "GET /s/AR1kS7om9Utk339 HTTP/2.0" 200 6600 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
192.168.2.166 - - [10/Dec/2019:10:46:53 +0400] "GET /apps/gallery/config.public?extramediatypes=1&token=AR1kS7om9Utk339 HTTP/2.0" 200 102 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"Поставили задачу - ограничить доступ к этой ссылке по IP. Не думал, что будут проблемы, но... Сначала закрыл доступ для всех, добавил в nginx.conf:
location = /s/AR1kS7om9Utk339 {
deny all;
}
В браузере при открытии ожидаемо Forbidden, в логе - соответственно:192.168.2.166 - - [10/Dec/2019:10:41:14 +0400] "GET /s/AR1kS7om9Utk339 HTTP/2.0" 403 153 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
Теперь открываю доступ избранным:
location = /s/AR1kS7om9Utk339 {
allow 192.168.2.166/32;
deny all;
}
Однако, в браузере почему-то Not Found, в логе - аналогично:192.168.2.166 - - [10/Dec/2019:10:45:13 +0400] "GET /s/AR1kS7om9Utk339 HTTP/2.0" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
Почему? Что я делаю не так?
> Имеется nginx, обслуживающий облако nextcloudНиже весь nginx.conf
user www;
worker_processes 8;error_log /var/log/nginx/error.log;
events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
client_max_body_size 0;
upstream php-handler {
server 127.0.0.1:9000;
}server {
listen 80;
server_name cloud.domain.ru;
return 301 https://$server_name$request_uri;
}server {
listen 443 ssl http2;
server_name cloud.domain.ru;access_log /var/log/nginx/cloud.domain.access.log;
error_log /var/log/nginx/cloud.domain.error.log;ssl_certificate /usr/local/etc/nginx/cloud.domain.ru.crt;
ssl_certificate_key /usr/local/etc/nginx/cloud.domain.ru.key;add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
add_header X-Frame-Options sameorigin;fastcgi_hide_header X-Powered-By;
root /www/nextcloud/;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}# location = /s/AR1kS7om9Utk339 {
# allow 192.168.2.166/32;
# deny all;
# }location = /.well-known/carddav {
#return 301 $scheme://$host/remote.php/dav;
return 301 https://$host/remote.php/dav;
}location = /.well-known/caldav {
#return 301 $scheme://$host/remote.php/dav;
return 301 https://$host/remote.php/dav;
}fastcgi_buffers 64 4K;
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;location / {
rewrite ^ /index.php;
}location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|ocm-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}location ~ ^\/(?:updater|ocs-provider|ocm-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}location ~ \.(?:css|js|woff2?|svg|gif)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;access_log off;
}location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$request_uri;
access_log off;
}
}
}
ls -l /www/nextcloud/s /www/nextcloud/s/AR1kS7om9Utk339
Что показывает?
>
> ls -l /www/nextcloud/s /www/nextcloud/s/AR1kS7om9Utk339
>
> Что показывает?No such file or directory показывает.
Ответ на вопрос "как сделать" нашел тут - https://serverfault.com/questions/845896/nginx-location-allo...
Теперь, когда не подгоняют с решением, вникаю в механизм произошедшего.
>>
>> ls -l /www/nextcloud/s /www/nextcloud/s/AR1kS7om9Utk339
>>
>> Что показывает?
> No such file or directory показывает.Именно.
Но прежде, вы должны ответить сами себе. Что именно вы хотите ограничить?
Если данные лежат внутри nextcloud, то и этот локейшен тоже должен там лежать, со своим или общим обработчиком php.
> Если данные лежат внутри nextcloud, то и этот локейшен тоже должен там
> лежать, со своим или общим обработчиком php.Де-факто их (данных) там нет, они вообще на другом сервере, а есть только информация в БД об общем ресурсе, плюс магия "pretty url"...
Пока очень туго соображаю, как с этим соотносится
Синтаксис: try_files файл ... uri;
try_files файл ... =код;
Умолчание: —
Контекст: server, locationПроверяет существование файлов в заданном порядке и использует для обработки запроса первый найденный файл, причём обработка делается в контексте этого же location’а.
>> Если данные лежат внутри nextcloud, то и этот локейшен тоже должен там
>> лежать, со своим или общим обработчиком php.
> Де-факто их (данных) там нет, они вообще на другом сервере, а есть
> только информация в БД об общем ресурсе, плюс магия "pretty url"...Если на другом сервере, тогда proxy_pass.
> Если на другом сервере, тогда proxy_pass.нет, не то.
Шары создаются внутри nextcloud и ни к каким конкретным каталогам/файлам могут вообще не привязываться.
Данная конкретная шара вообще ведет на windows-файлопомойку.
>> Если на другом сервере, тогда proxy_pass.
> нет, не то.
> Шары создаются внутри nextcloud и ни к каким конкретным каталогам/файлам могут вообще
> не привязываться.
> Данная конкретная шара вообще ведет на windows-файлопомойку.тогда proxy_pass
> тогда proxy_pass1. proxy_pass в конфига отсутствует, а шары с другиз серверов - работают
2.
location = /s/AR1kS7om9Utk339 {
deny 10.0.0.16/32;
allow 10.0.0.0/8;
deny all;
try_files $uri $uri/ /index.php?$query_string;
}решает мой вопрос, proxy_pass также не наблюдается.
Ответ "почему" также расписан по ссылке, которую я давал. Не хватает времени и знаний, чтобы четко осознать сказанное на чужом языке. Но это временно :)
>[оверквотинг удален]
> deny 10.0.0.16/32;
> allow 10.0.0.0/8;
> deny all;
> try_files $uri $uri/ /index.php?$query_string;
> }
>
Проксирование средствами php, чудес не бывает. Главное, чтоб памяти хватило :)
> Проксирование средствами php, чудес не бывает.Вот это больше похоже на правду. Ответ где-то тут
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|ocm-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}Вот как понять "But you are overriding the try_files statement in the location / block, so you should add it to the new location block"
Непонятно конкретно вот это - "Вы переопределяете try_files в блоке location /"
Как бы это выразиться - каждое новое определение location заново инициализирует...обнуляет...приводит в значение по умолчанию значение try_files, что ли?