Chuyện gì đang xảy ra vậy?
Bạn phải sử dụng Debian hoặc Ubuntu, vì ác sites-available
/ sites-enabled
logic không được sử dụng bởi bao bì ngược dòng của nginx từ http://nginx.org/packages/ .
Trong cả hai trường hợp, cả hai đều được thực hiện như một quy ước cấu hình với sự trợ giúp của include
chỉ thị tiêu chuẩn /etc/nginx/nginx.conf
.
Đây là một đoạn trích /etc/nginx/nginx.conf
từ gói nginx chính thức từ nginx.org:
http {
…
include /etc/nginx/conf.d/*.conf;
}
Đây là một đoạn trích /etc/nginx/nginx.conf
từ Debian / Ubuntu :
http {
…
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Vì vậy, theo quan điểm của NGINX, sự khác biệt duy nhất là các tệp từ conf.d
sẽ được xử lý sớm hơn và, do đó, nếu bạn có các cấu hình âm thầm xung đột với nhau, thì các tệp đó conf.d
có thể được ưu tiên hơn các tệp trong đó sites-enabled
.
Thực hành tốt nhất là conf.d
.
Bạn nên sử dụng /etc/nginx/conf.d
, vì đó là một quy ước tiêu chuẩn, và nên hoạt động ở bất cứ đâu.
Nếu bạn cần vô hiệu hóa một trang web, chỉ cần đổi tên tệp thành không còn .conf
hậu tố, rất dễ dàng, đơn giản và không có lỗi:
sudo mv -i /etc/nginx/conf.d/default.conf{,.off}
Hoặc ngược lại để kích hoạt một trang web:
sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}
Tránh sites-available
và bằng sites-enabled
mọi giá.
Tôi thấy hoàn toàn không có lý do để sử dụng sites-available
/ sites-enabled
:
Một số người đã đề cập nginx_ensite
và nginx_dissite
các tập lệnh - tên của các tập lệnh này thậm chí còn tồi tệ hơn phần còn lại của sự kiện này - nhưng các tập lệnh này cũng không được tìm thấy - chúng không có trong nginx
gói ngay cả trong Debian (và có lẽ trong Ubuntu nữa) và không có trong một gói của riêng họ, ngoài ra, bạn có thực sự cần một tập lệnh bên thứ ba không chuẩn để chỉ cần di chuyển và / hoặc liên kết các tệp giữa hai thư mục không?!
Và nếu bạn không sử dụng các tập lệnh (trên thực tế, đó là một lựa chọn thông minh như trên), thì vấn đề là làm thế nào để bạn quản lý các trang web:
- Bạn có tạo các liên kết tượng trưng từ
sites-available
đến sites-enabled
?
- Sao chép các tập tin?
- Di chuyển các tập tin?
- Chỉnh sửa các tập tin tại chỗ trong
sites-enabled
?
Những điều trên có vẻ như là một số vấn đề nhỏ cần giải quyết, cho đến khi một số người bắt đầu quản lý hệ thống hoặc cho đến khi bạn đưa ra quyết định nhanh chóng, chỉ để quên nó hàng tháng hoặc hàng năm
Điều này đưa chúng ta đến:
Có an toàn để loại bỏ một tập tin từ sites-enabled
? Có phải là liên kết mềm? Một liên kết cứng? Hoặc bản sao duy nhất của cấu hình? Một ví dụ điển hình của địa ngục cấu hình.
Những trang web đã bị vô hiệu hóa? (Với conf.d
, chỉ cần thực hiện tìm kiếm đảo ngược cho các tệp không kết thúc bằng .conf
- find /etc/nginx/conf.d -not -name "*.conf"
hoặc sử dụng grep -v
.)
Không chỉ tất cả những điều trên, mà còn lưu ý include
chỉ thị cụ thể được sử dụng bởi Debian / Ubuntu - /etc/nginx/sites-enabled/*
- không có hậu tố tên tệp nào được chỉ định cho sites-enabled
, không giống như cho conf.d
.
- Điều này có nghĩa là nếu một ngày nào đó bạn quyết định nhanh chóng chỉnh sửa một hoặc hai tệp trong đó
/etc/nginx/sites-enabled
và bạn emacs
tạo một tệp sao lưu như thế default~
thì đột nhiên, bạn có cả hai default
và được default~
bao gồm dưới dạng cấu hình hoạt động, tùy theo chỉ thị được sử dụng, thậm chí có thể không cung cấp bạn có bất kỳ cảnh báo nào và khiến phiên gỡ lỗi kéo dài diễn ra. (Vâng, điều đó đã xảy ra với tôi; đó là trong một cuộc thi hackathon và tôi hoàn toàn bối rối về lý do tại sao conf của tôi không hoạt động.)
Vì vậy, tôi tin rằng đó sites-enabled
là ác quỷ thuần túy!
www-data
là một chủ đề riêng biệt. Hầu hết các hệ điều hành xác định một người dùng riêng biệt với các quyền thấp hơn mà quy trình có thể chạy như sau khi liên kết với cổng 80 dưới dạng root. Nó được định nghĩa trong tập tin cấu hình. Áp dụng các thực hành bảo mật cơ bản từ đó; không để người dùng viết vào bất cứ thứ gì mà máy chủ web không cần phải ghi vào, đừng để người dùng khác ghi vào các tập tin trừ khi nó cố tình.