Khi sử dụng Apache, thông thường để bảo vệ thư mục chúng ta thường sử dụng file .htaccess và .htpasswd. Tuy nhiên, Nginx lại không hỗ trợ .htaccess. Các bạn hãy xem hướng dẫn Basic HTTP Authentication bên dưới để có thể thực hiện bảo vệ thư mục trong Nginx.
Mục tiêu
Bảo vệ thư mục http://example.com/test/
với đường dẫn server là /home/example.com/public_html/test/
, file cấu hình Nginx /etc/nginx/conf.d/example.com.conf
1. Tạo file Password
Đầu tiên mình sẽ cần một file để lưu trữ thông tin username/password đăng nhập (đã được mã hóa) bằng cách sử dụng script Python http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py. Ngoài ra, có thể sử dụng Apache’s htpasswd Tool tuy nhiên phải cài thêm vào server nên mình không khuyến khích sử dụng.
Download script về /usr/local/bin
và chạy
cd /usr/local/bin wget http://trac.edgewall.org/export/10791/trunk/contrib/htpasswd.py chmod 755 /usr/local/bin/htpasswd.py
Giờ mình sẽ tạo file password /home/example.com/public_html/.htpasswd
với user hocvps, password hocvpstest. Lưu ý bạn có thể sử dụng file bất kỳ và lưu ở chỗ nào cũng được.
htpasswd.py -c -b /home/example.com/public_html/.htpasswd hocvps hocvpstest
Tham số -c để thực hiện tạo mới file nếu chưa có, nếu file đã tồn tại thì sẽ overwrite do đó mất hết các user từ trước. Trong trường hợp bạn muốn add thêm user nữa thì bỏ tham số -c đi:
htpasswd.py -b /home/example.com/public_html/.htpasswd hocvps2 hocvpstest2
Update: các bạn có thể sử dụng trực tiếp tool này cho nhanh: http://www.htaccesstools.com/htpasswd-generator/
2. Cấu hình Nginx
Mở file cấu hình Nginx
nano /etc/nginx/conf.d/example.com.conf
Thêm nội dung như sau vào trong server { … }
server { listen 80; [...] location /test { auth_basic "Restricted"; auth_basic_user_file /home/example.com/public_html/.htpasswd; } [...] }
Reload Nginx
/etc/init.d/nginx reload
Giờ khi truy cập vào http://example.com/test sẽ có thông báo yêu cầu đăng nhập hiện ra:
Nếu bạn không đăng nhập hoặc đăng nhập sai sẽ báo lỗi:
Vậy là ok rồi đó.
Mình lười toàn tải file về, chỉnh trong notepad++ rồi up đè lên
Cho em hỏi ngoài lề xíu em dùng mã này trong file .htaccess để chặn ip giờ muốn chỉ cho phép một số ip nhất định có thể truy cập thì dùng mã nào cám ơn admin
ORDER ALLOW,DENY
DENY FROM 192.168.1.1
DENY FROM 234.45.67.89
DENY FROM 123.45.67.89
ALLOW FROM ALL
Nó là Giới hạn IP truy cập
Mà bạn đang hỏi Apache hay để convert Nginx?
Bên Apache thì là
order allow,deny
allow from x.x.x.x
deny from all
Thực ra bạn có thể bỏ dòng deny vì theo trật tự sẽ chỉ allow http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order
Còn bên Nginx là
allow X.X.X.X;
deny all;
Sao mình thêm như vậy và xóa cache trên trình duyệt r k thấy nó hoạt động ta? vần login bình thường.
server {
listen 80;
server_name mywebsite.com http://www.mywebsite.com;
rewrite ^(.*) https://mywebsite.com$1 permanent;
location /wp-admin {
auth_basic_user_file /home/mywebsite.com/public_html/.htpasswd;
}
}
Bạn thêm vào block chứa web nhé, không phải block redirect
à ok được r bạn cám ơn nhé 😀
Mình dùng cách này để bảo vệ thư mục master chứa linfo để xem thông tin VPS. Tuy vậy khi nhập username và password thì nó lại không cho mình xem thông tin mà tải cái file index.php về. Làm thế nào để sửa vậy bạn?
Cấu hình Nginx bạn post ra nhé. Và vô hiệu hóa phần bảo vệ thư mục thì truy cập hiện thông báo gì?
Ơ, mình bỏ đi ^~ trước đường dẫn thì lại xem được nhỉ. Dấu này có ý nghĩa gì vậy bạn nhỉ?
làm sao để bảo vệ được file bên trong thư mục nhỉ ?
ví dụ: thư mục cần bảo vệ là “domain.com/baove”
làm theo cách của bạn ở trên thì khi vào domain.com/baove ->yêu cầu mật khẩu, đã test ok.
Nhưng trường hợp mình có file admin.php bên trong thư mục baove, mình dùng trình duyệt gõ thẳng domain.com/baove/admin.php thì nó thực thi luôn chứ không hỏi pass gì nữa cả.
Bạn có cách nào chặng tất cả file bên trong thư mục luôn không ?
Đây là do bạn đã truy cập được thư mục
/baove
rồi nên trình duyệt lưu cookie luônCòn nếu bạn chưa truy cập được thì nội dung bên trong cũng không truy cập được đâu
Muốn chọn Apache hoặc Nginx thì chọn ở bước nào vậy Luân, mình có thể thuê bạn cài đặt trọn gói 1 cái VPS (từ bảo mật, tăng tốc độ, các bước cần thiết nhất) cho mình chỉ việc xài được ko?
Đây là áp dụng với VPS đã cài đặt Nginx làm webserver bạn ạ.
Còn vấn đề kia, bạn liên hệ thông qua https://hocvps.com/dich-vu
“Tech-Demo-Logo.png” has failed to upload.
Unable to create directory wp-content/uploads/2016/09. Is its parent directory writable by the server?
cho mình hỏi,minh cài wordpress vào vps nhưng lúc up load lên bi lỗi như trên vậy mong bạn cho mình hỏi mình phải làm thế nào?
Bạn cài web server theo hướng dẫn nào thế?
Mình làm các bước như trên nhưng khi đăng nhập vào vẫn báo: “500 Internal Server Error”
Bạn check error log đi?
Mình đọc thì có dòng này:
2016/08/02 00:58:41 [crit] 32020#32020: *7 open() “/thumuc/.htpasswd” failed (13: Permission denied), client: 117.0.214.65, server: domain.com, request: “GET /thumucbaove/ HTTP/1.1”, host: “domain.com”
Sao lại có cái thumuc và thumucbaove thế kia nhỉ 😛
mình đổi tên nó đi thôi mà
Vấn đề ở chỗ đó, bạn thống nhất sử dụng 1 cái thôi chứ
Thay vì sử dụng tool htpasswd.py các bạn có thể sử dụng trực tiếp site này nhé: http://www.htaccesstools.com/htpasswd-generator/
Thanks Luân, đang cần cái này
Sao mình làm hoài lúc đăng nhập thì cứ down file về vậy admin ?? Xin cám ơn !
Luận ơi cho mình hỏi chút sao website của mình dùng vps ở Vulr nhưng vào web nó cứ đòi bắt nhập pass cổng 80 thế nhỉ
Website của bạn là gì thế?
Bác cho em hỏi sau khi em bảo mật như trên thì em bỏ phpmyadmin script hoặc op.php (theo dõi op cache) thì nó ko chạy đc toàn lên 404 Not Found. Nếu em tạo thư mục abc khác cho code vào vẫn chạy bt nhưng ko có password như trên/ 🙁
Giống như đăng nhập vào Router . Mà bác Luân cho hỏi là bác có biết cái trang hayhaytv.vn nó dùng Mã nguồn nào không ?
Bác PM hỏi admin ấy, chứ mình chịu. Dự là code tự làm :v
Mình chạy lệnh /etc/init.d/nginx reload thì báo lỗi này là sao nhỉ?
-bash: /etc/init.d/nginx: No such file or directory
Bạn thử với lệnh này xem sao: service nginx reload
[Bổ sung] Mình dùng dns của Cloud flare
VPS của Linode
Vẫn bị lỗi www Luân nhé,
Mình add 3 site, trong đó 2 site không có www thì chạy ok, 1 site có www thì trỏ về site chính (main site lúc cài hocvps)
Đây là site bị lỗi http://www.coffeeresearch.net/
Mình fix lỗi www tức là khi add domain có www nó cứ redirect lung tung, ko vào được site. Còn hiện tại site của bạn http://coffeeresearch.net tự redirect sang http://www.coffeeresearch.net chứng tỏ mọi việc đang bình thường, mình nghĩ vấn đề khác. Bạn xem lại danh sách những site đang add trên vps rồi báo lại mình nhé.
Em làm được rồi nhưng sau khi login thành công nó cứ bắt tải file php về là sao nhỉ 🙁
Bạn chưa khởi động hoặc chưa cài PHP rồi
Cài rồi mà anh, em đang chạy bình thường mà giờ vào nó toàn tự tải về 🙁
À được rồi anh ạ, em bỏ ^~ ở /test đi thành /test nên đc 😀
Bạn cho mình hỏi, cách này theo mình hiểu là 1 site chạy trên 1 vps thì bảo mật theo cách này, nếu mình có 1 server, tạo nhiều user, vậy thì không thể nào mỗi lần tạo user là lại phải add “auth_basic_user_file /home/example.com/public_html/.htpasswd;” , bạn có cách nào tối ưu hơn cho 1 vps có nhiều user không ? Mình xin cảm ơn 🙂
Luân có thể chỉ cho mình những plugin nào hỗ trỡ bảo mật wordpress trên nginx được ko?
Ví dụ như thay đổi đường dẫn register hoặc login chẳng hạn…
Những vấn đề này ko quan trọng bạn sử dụng server nào cả. Nên vào những group, forum chuyên về WP để hỏi nhé bạn.
Luân ơi, như mình đọc và hiểu thì các plugin hỗ trợ cho wp dùng Nginx rất ít mà chủ yếu xài cho apache phải ko, làm cách nào để biết một plugin là dành cho nginx để cài đặt vào web khi mình xài nginx nhỉ?