2010-01-06 15 views
16

Tôi đang cố gắng để có được xác thực cơ bản làm việc với nginx trong Ubuntu Jaunty. Trong nginx.conf, tôi bổ sung thêm hai dòng sau trong bối cảnh server:nginx và auth_basic

server { 
    ... 
    auth_basic "Restricted Access"; 
    auth_basic_user_file /etc/nginx/.htpasswd; 
    ... 
} 

Sau đó, tôi apt-get'ed apache2-utils để có được htpasswd, mà tôi sử dụng để tạo ra các tập tin htpasswd:

htpasswd -d -c /etc/nginx/.htpasswd joe 

Khi tôi cố truy cập trang web, hộp thoại xác thực xuất hiện như mong đợi, nhưng khi tôi đặt tên người dùng và mật khẩu, nó chỉ làm mới hộp thoại. Nó dường như không thích mật khẩu tôi đang cung cấp. Tôi đã thử chạy htpasswd cả hai có và không có tùy chọn -d, nhưng vẫn không có may mắn. Nó từ chối xác thực. Bất kỳ ý tưởng những gì tôi đang làm sai?

Mọi trợ giúp sẽ được đánh giá cao.

+0

Bạn có thử đường dẫn tương đối cho "auth_basic_user_file" không? – Nakul

+0

@KP bạn có thể chia sẻ những gì đã sửa lỗi này cho bạn không? – codecowboy

Trả lời

25

Những điều tôi sẽ kiểm tra:

  • Quyền trên `/ etc/nginx/.htpasswd` - các tập tin có thể được đọc bởi các tài khoản chạy nginx? Bạn có thể thử, tạm thời, bằng cách sử dụng `chmod 644` để đảm bảo mọi người có thể đọc nó. Nếu nó hoạt động, thì bạn có thể sắp xếp một sự kết hợp thích hợp của các cài đặt `chown` và` chmod` để nginx và bạn/root có thể đọc nó nhưng những người dùng khác không thể (để bảo mật).
  • Đảm bảo rằng `htpasswd` đang tạo hàm băm ở dạng đúng; thường có khoảng 13 ký tự chữ và số (ví dụ: tên người dùng: wu.miGq/e3nro`). Lệnh này cũng có thể tạo ra các băm MD5 trông giống như `username: $ apr1 $ hzB2K ... $ b87zlCYMKufOxn9ol5QV4 /` những thứ này không hoạt động với nginx.
  • Xem xét việc tăng đầu ra gỡ lỗi của nginx và kiểm tra nhật ký lỗi cho các đầu mối.
+4

theo tài liệu tại http: // nginx.org/en/docs/http/ngx_http_auth_basic_module.html "biến thể Apache của thuật toán mật khẩu dựa trên MD5 (apr1)" hiện được hỗ trợ – kkurian

+0

Ngay cả các tài liệu chỉ ra rằng "Biến thể Apache hiện được hỗ trợ", tôi chỉ giải quyết vấn đề này bằng cách sử dụng PLAIN thuật toán. Thật không may, với đăng nhập gỡ lỗi trong nginx, thông báo vẫn "mở()" .htpasswd "không thành công (13: Quyền bị từ chối)", có thể là nguyên nhân gốc bên trong của vấn đề (nhìn dưới góc độ phát triển của nginx), nhưng vô ích khi bạn đang cố khắc phục sự cố. –

4

Chủ đề cũ, nhưng không có câu trả lời và được tham chiếu tốt trên Google.

Nếu bạn nhận được lỗi này và đã thử những gợi ý khác, rà soát các điều khoản của thư mục mẹ file htpasswd của bạn: người sử dụng nginx (www-data theo mặc định) nên đã đọc và thực hiện quyền (CÁi này đã sửa nó giúp tôi).

1

Một hình ảnh xác thực khác mà tôi gặp phải trên bash. Thay vì nhập mật khẩu của tôi qua lời nhắc, tôi đã sử dụng tùy chọn -b của htpasswd để nhập mật khẩu trực tuyến.

$ htpasswd -nb admin test123$secure 

Tôi không thể hiểu tại sao tôi tiếp tục gặp lỗi không khớp mật khẩu, thử các thuật toán mã hóa khác nhau. Tôi xác nhận với curl rằng nó làm việc:

$ curl -u admin:test123$secure https://example.com 

Cuối cùng, vấn đề reveiled chính nó thông qua echo

$ echo test123$secure 
test123 

Tôi đã sai lầm khi sử dụng một dấu dolar ($) trong bash được hiểu là một biến trống, do đó bỏ qua mọi thứ khác. Điều này có thể tránh được bằng cách thả tùy chọn -b và chỉ sử dụng lời nhắc nhập mật khẩu.

+0

Người bảo trợ có thể nhận xét? Có phải đó là một bình luận hơn là một câu trả lời? –

+0

Được thăng hạng, chỉ vì sự giảm giá .. – kev