Я запускаю 2 веб-сайта в стеке LEMP с nginx, настроенным как обратный прокси-сервер. Я успешно установил phpmyadmin в корневую папку одного из корневых каталогов моих сайтов. Когда я перехожу на www.example.com/phpmyadmin, я могу получить доступ к странице входа phpmyadmin в общедоступном Интернете, а также в своей локальной сети. Я бы хотел настроить nginx для блокировки любого трафика phpmyadmin, который исходит не из моей локальной сети. В настоящее время у меня также есть папка / admin в корне моего сайта, и я УСПЕШНО настроил способ блокировать весь трафик в эту папку, который исходит не из моей локальной сети. Я решил, что заблокировать phpmyadmin из внешнего мира будет так же просто, используя те же строки виртуальной конфигурации ngninx, которые я использовал для блокировки каталога / admin /, но просто изменив местоположение на / phpmyadmin. Однако при этом phpmyadmin по-прежнему блокируется в локальной сети.
Ниже приведена конфигурация моего виртуального хоста nginx для example.com. Вы можете увидеть, какие конфигурации блокировки работают и не работают, как указано в комментариях. Помогите исправить # Нерабочие строки. Примечание. Локальный IP-адрес моего сервера 192.168.1.20
.
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
####
# SSL configuration
####
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Modern SSL Security rating
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains" always;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
# replace with the IP address of your resolver
resolver 1.1.1.1 1.0.0.1;
# Your website name goes here.
server_name example.com www.example.com;
root /var/www/example.com;
# Error & Access Logs
error_log /var/www/example.com.logs/error.log error;
access_log /var/www/example.com.logs/access.log;
## This should be in your http block and if it is, it's not needed here.
index index.php;
location ~ /.well-known {
allow all;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
# try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?$args;
}
# Cache Static Files For As Long As Possible
location ~*
\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$
{
access_log off;
log_not_found off;
expires max;
}
# Security Settings For Better Privacy Deny Hidden Files
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# Disallow PHP In Upload Folder
location /wp-content/uploads/ {
location ~ \.php$ {
deny all;
}
}
# LAN ONLY ACCESS WORKING
# Only allow access of /admin via LAN & block access from internet # WORKING
location ^~ /admin {
allow 192.168.1.0/24;
deny all;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
}
# LAN ONLY ACCESS NOT WORKING!!!
# Only allow access of /phpmyadmin from LAN & block access from internet # NOT WORKING
location ^~ /phpmyadmin {
allow 192.168.1.0/24;
deny all;
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass local_php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
# LAN ONLY ACCESS WORKING
# Only allow access to wp-login page from LAN & block access from internet # WORKING
location ~ /wp-login.php {
allow 192.168.1.0/24;
deny all;
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass local_php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass local_php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
Какие изменения в конфигурационном файле моего виртуального хоста я должен внести, чтобы правильно ограничить phpmyadmin моей локальной сетью в Nginx?
Вы можете использовать правила разрешения / запрета:
stream {
#...
server {
#deny 192.168.1.2;
allow 192.168.1.1/24;
deny all;
}
}