Linux command

Khi Apache không nhận domain, trả về 403 hoặc trang mặc định testing 123

Bị lỗi Apache trên CentOS không nhận domain và cách khắc phục cực đơn giản

Chán ơi là chán, một lỗi ngớ ngẩn đã làm tôi tốn mất 4h đồng hồ để sửa chữa. Vì linux là hệ điều hành kiểu “gõ lệnh” nên nó mới đau đầu làm sao !

Nếu các bạn đang chạy VPS hoặc Serverlinux, và đang sử dụng hệ điều hành CentOS, thì kinh nghiệm sau đây sẽ rất bổ ích cho các bạn.

Trường hợp khác bạn không sử dụng Cpanel hoặc DirectAdmin mà muốn viết script tự chạy cho tiết kiệm bộ nhớ, thì đây cũng là kinh nghiệm bổ ích cho các bạn. Khi quản trị Server và thêm domain vào trong server sẽ hay xảy ra các trường hợp tương tự.

Sau đây tôi kể cho các bạn cái lỗi ngớ ngẩn ơi là ngớ ngẩn này.

Trước tiên, tôi tạo User và add nó vào Group bằng một cái script tôi tự viết. Sau khi add xong thì add domain trên cái dòng lệnh ấy. Và ngay sau khi add domain thì truy cập vào chỉ trả về một trang “testing 123” mặc định của Apache chứ không chịu chạy dù quăng cái gì vào đó.

Tôi nghĩ ngay tới phân quyền, nhưng không có cách nào làm được mới cú, tôi thử Chmod nó về 755 xem sao.

Chmod 755 /home/xxxx

Nó vẫn vậy, thật kỳ lạ ! Tôi thử soi xem phân quyền có đúng không bằng lệnh:

# ls -la /home/xxxx

Thì nó show ra đúng y chang cái mình muốn:

total 16
drwxrwxr-x.  3 root            root    69 Sep  1 03:28 .
drwxr-xr-x. 16 root            root  4096 Sep  1 03:28 ..
-rw-r--r--.  1 anuser coder   18 Aug  2 23:00 .bash_logout
-rw-r--r--.  1 anuser coder  193 Aug  2 23:00 .bash_profile
-rw-r--r--.  1 anuser coder  231 Aug  2 23:00 .bashrc
drwxr-xr-x.  3 anuser coder   35 Sep  1 03:28 www

Vậy tại sao nó không chạy ? Tôi nghiên cứu thử cái thằng SElinux xem sao. Đây là một tầng bảo mật rất tốt của CentOS 7. Cấu hình sai có thể dẫn tới trường hợp đáng tiếc ngay lập tức.

Tôi thử kiểm tra phân quyền tiếp bằng lệnh này:

# ls -Z /home/xxxx

Thì nó show thế này:

drwxr-xr-x. anuser coder unconfined_u:object_r:default_t:s0 www

Đây con bố nhà nó rồi. Thử so sánh với một cái domain khác của tôi đang chạy trên Server thì thấy, cái thằng default_t đáng lẽ ra phải là “httpd_sys_content_t” mới chạy được.

Đầu tiên tôi bật chế độ tự động nhận home cho Apache:

setsebool -P httpd_enable_homedirs true

Đây là bật cho SElinux nhá, và nếu thiếu -P thì chỉ cần khởi động lại là nó trở về mặc định, phải có -P nhé các bạn ! Sau khi bật xong thằng SElinux, giờ là lúc phải phân quyền cho cái thư mục mà mình vừa mới tạo ra rồi đó:

chcon -R -t httpd_sys_content_t /home/xxxx

Sau đó các bạn kiểm tra lại phân quyền xem thế nào:

# ls -Z /home/xxxx

Thì nó show ra đúng cái này mới chạy:

drwxr-xr-x. anuser coder unconfined_u:object_r:httpd_sys_content_t:s0 www

Và giờ truy cập vào trong domain nó sẽ chưa có hiện tượng gì, các bạn chạy lệnh restart Apache như sau:

systemctl restart httpd.service

Ngon rồi đấy !

Hoá ra mình chưa bật httpd_sys_content_t ở trong SElinux !

TÁC GIẢ:

Tôi là Jam, thâm niên 7 năm thiết kế website và làm SEO. Hãy theo dõi blog của tôi để nhận được nhiều chia sẻ thú vị xung quanh chủ đề công nghệ.
Bạn có thấy bài viết về apache không nhận domain thú vị ? Chia sẻ ngay tới mọi người, hoặc tham gia bình luận thật sôi nổi nhé !

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *