NGINX auth dasar hanya untuk POST

8

Saya menyiapkan nginx untuk melayani repositori Mercurial. Ini berfungsi ketika tidak menggunakan otentikasi dasar sama sekali, atau ketika saya menggunakan otentikasi dasar di seluruh.

Yang ingin saya lakukan adalah hanya menggunakan auth dasar pada permintaan POST, sehingga siapa pun memiliki akses menarik, tetapi hanya pengguna yang diautentikasi yang dapat mendorong.

Saya mencoba yang berikut,

if ($request_method = POST) {
  auth_basic "Restricted";
  auth_basic_user_file /path/to/userfile
}

Namun ia mengeluh tentang "arahan auth_basic tidak diizinkan di sini".

Bagaimana saya bisa memecahkan masalah ini?

Adrian Heine
sumber

Jawaban:

13

Anda harus menggunakan limit_except:

limit_except GET HEAD {
    auth_basic 'Restricted';
    auth_basic_user_file /path/to/userfile;
}

Ini bekerja sejak nginx 0.8.48, dalam versi yang lebih lama ada bug di mana fastcgi_passtidak diwariskan di dalam blok limit_except.

Mitar
sumber