GNU/Linux >> Belajar Linux >  >> Linux

Atur nginx.conf untuk menolak semua koneksi kecuali ke file atau direktori tertentu

Jalan termudah adalah memulai dengan menolak semua akses, lalu hanya memberikan akses ke direktori yang Anda inginkan. Seperti yang ditunjukkan ring0, Anda dapat menggunakan bendera default (default_server di 0.8) pada direktif mendengarkan. Namun, jika Anda sudah memiliki server yang ingin Anda gunakan sebagai default untuk akses bernama tidak dikenal ke host Anda, Anda juga bisa menangkap permintaan tanpa header host atau dengan alamat ip server Anda dengan sesuatu seperti ini (mengganti 1.2.3.4 dengan Anda ip server:

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 akan diwarisi oleh kedua lokasi fastcgi_pass, dan hanya /index.php dan /phpmyadmin/ yang diizinkan. Saya juga telah menambahkan blok upstream untuk php, yang membuatnya lebih mudah jika Anda perlu menambah atau mengubahnya di masa mendatang.


Penggunaan kreatif dari lokasi dan menolak aturan yang dinegasikan dalam regex, seperti:

    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;
    }

Itu belum teruji tetapi Anda mendapatkan idenya.

http://wiki.nginx.org/HttpAccessModule

http://wiki.nginx.org/HttpCoreModule#location

Juga, ini dapat membantu Anda menulisnya:

http://www.regextester.com/


Linux
  1. Cara tar (kompres) file, tidak termasuk file atau direktori tertentu

  2. Hapus Semua File Dalam Satu Folder Kecuali Yang Terakhir (Terbaru) 20?

  3. Menggunakan Variabel Lingkungan Dalam File Tmux.conf?

  1. Daftarkan semua file secara rekursif dalam direktori termasuk file dalam direktori symlink

  2. Cara mendaftar semua file dan direktori secara rekursif

  3. Pindahkan semua file kecuali satu

  1. Cara Menemukan File Di Linux Di Semua Direktori Secara Rekursif

  2. Tolak semua koneksi masuk dengan iptables?

  3. Bagaimana menemukan / mendaftar semua file unik di dua direktori?