いくつかの任意のディレクトリとファイルを除いて、数値IPへのすべての接続が拒否されるようにNginxを設定しようとしています。したがって、誰かが私のIPにアクセスすると、たとえばindex.phpファイルやphpmyadminディレクトリへのアクセスは許可されますが、他のディレクトリへのアクセスは拒否されます。
これはnginx.conf
のサーバーブロックです。
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm index.php;
}
location ~ \.php$ {
root html;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/http/nginx/$fastcgi_script_name;
include fastcgi_params;
}
}
どのように進めますか?どうもありがとう!
最も簡単な方法は、すべてのアクセスを拒否してから、必要なディレクトリへのアクセスのみを許可することです。 ring0が指摘したように、listenディレクティブでデフォルト(0.8ではdefault_server)フラグを使用できます。ただし、ホストへの不明な名前付きアクセスのデフォルトとして使用するサーバーがすでにある場合は、ホストヘッダーなしで、またはサーバーのIPアドレスを使用して、次のようなリクエストをキャッチすることもできます(1.2.3.4をサーバーのIP:
upstream _php {
server unix:/var/run/php-fpm/php-fpm.sock;
}
server {
server_name "" 1.2.3.4;
root /path/to/root;
index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# deny everything that doesn't match another location
location / { deny all; }
# allow loading /index.php
location = / { } # need to allow GET / to internally redirect to /index.php
location = /index.php { fastcgi_pass _php; }
# allow access to phpmyadmin
location /phpmyadmin/ { } # Allow access to static files in /phpmyadmin/
location ~ ^/phpmyadmin/.*\.php$ { fastcgi_pass _php; } # phpmyadmin php files
}
fastcgi_paramsはfastcgi_passの両方の場所に継承され、/ index.phpと/ phpmyadmin /のみが許可されます。また、phpのアップストリームブロックを追加しました。これにより、将来追加または変更する必要が生じた場合に、より簡単になります。
場所の創造的な使用と正規表現で否定されたルールの拒否。
location / {
root html;
index index.html index.htm index.php;
}
location ~* !^/(index.(php|html|htm)$)|(phpmyadmin/) {
deny all;
}
location ~ \.php$ {
root html;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/http/nginx/$fastcgi_script_name;
include fastcgi_params;
}
それはテストされていませんが、あなたはアイデアを得ます。
http://wiki.nginx.org/HttpAccessModule
http://wiki.nginx.org/HttpCoreModule#location
また、これはあなたがそれを書くのを助けるかもしれません:
ドメイン名で呼び出されるserversを宣言し、直接IPアクセスを含むdefaultサーバーを宣言する方が簡単です。
たとえば、ドメイン構成は、たとえばmydomain.com
に使用できます。
server {
listen 80;
server_name mydomain.com *.mydomain.com;
root /var/www/html/mydomain.com
...
通常のファイルを/var/www/html/mydomain.com
ディレクトリに配置します。
また、デフォルトのエントリでは、別の場所にある特定のファイルへのアクセスしか許可されません。listen 80
の後にdefaultキーワードがあることに注意してください。
server {
listen 80 default;
server_name _ *;
root /var/www/html/restricted
...
そして、デフォルトのファイルを/var/www/html/restricted
に入れます。これは、localhostおよび未加工のIPアドレス用に提供されます。
Index.phpへのすべてのパスを直接設定し、このファイルのみに設定することができますnginxのfastcgi php7
//redirect all to index.php
location / {
autoindex off;
set $redirect_url $uri;
try_files $uri $uri/ /index.php$is_args$query_string;
}
location = /index.php {
include fastcgi.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
//Extra Params script PHP
fastcgi_param PATH_INFO $redirect_url;
fastcgi_param HTTP_Host $server_name;
}