Các cách sử dụng khác nhau cho các trang web có sẵn so với thư mục conf.d cho nginx


99

Tôi có một số kinh nghiệm sử dụng linux nhưng không có sử dụng nginx. Tôi đã được giao nhiệm vụ nghiên cứu các tùy chọn cân bằng tải cho một máy chủ ứng dụng.

Tôi đã sử dụng apt-get để cài đặt nginx và tất cả có vẻ ổn.

Tôi có một vài câu hỏi.

Sự khác biệt giữa thư mục trang web có sẵn và thư mục conf.d là gì. Cả hai thư mục này đều được BAO GỒM trong thiết lập cấu hình mặc định cho nginx. Hướng dẫn sử dụng cả hai. Họ để làm gì và thực hành tốt nhất là gì?

Thư mục kích hoạt trang web được sử dụng để làm gì? Làm thế nào để tôi sử dụng nó?

Cấu hình mặc định tham chiếu người dùng dữ liệu www? Tôi có phải tạo người dùng đó không? Làm cách nào để cung cấp cho người dùng quyền tối ưu để chạy nginx?


Cố gắng tránh phạm vi creep khi đặt câu hỏi; www-datalà 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.
Andrew B

Câu trả lời:


94

Các thư mục site- * được quản lý bởi nginx_ensitenginx_dissite. Đối với người dùng Apache httpd tìm thấy điều này với một tìm kiếm, tương đương là a2ensite/ a2dissite.

Các sites-availablethư mục là để lưu trữ tất cả các cấu hình vhost của bạn, dù có hoặc không hiện đang được kích hoạt.

Các sites-enabledthư mục chứa liên kết tượng trưng đến tập tin trong thư mục sites-available. Điều này cho phép bạn vô hiệu hóa có chọn lọc các vhost bằng cách xóa symlink.

conf.dthực hiện công việc, nhưng bạn phải di chuyển một cái gì đó ra khỏi thư mục, xóa nó hoặc thay đổi nó khi bạn cần vô hiệu hóa một cái gì đó. Sự trừu tượng hóa thư mục site- * làm cho mọi thứ trở nên ngăn nắp hơn và cho phép bạn quản lý chúng với các tập lệnh hỗ trợ riêng biệt.

(trừ khi bạn giống tôi và một trong nhiều quản trị viên debian, người chỉ trực tiếp quản lý các liên kết tượng trưng, ​​không biết về các tập lệnh ...)


12
Tôi đã nhận được một cái gì đó sai? Không hiểu downvote.
Andrew B

1
tôi tò mò điều này được xây dựng vào nginx? tôi đã cài đặt thủ công github.com/perusio/nginx_ensite
lfender6445

18
Điều quan trọng cần lưu ý đó sites-available|sites-enabledlà ism-Debian và không phải là thứ mà nginx hoặc Apache làm. Nó có thể khá hữu ích trong quá khứ, nhưng tiện ích của nó có phần bị hạn chế trong thời đại quản lý cấu hình và bộ chứa.
Michael Hampton

Bạn có thể nhận xét cách quản lý cấu hình và vùng chứa giới hạn tiện ích của các trang web có sẵn | kích hoạt trang web không?
karthik vee

1
@karthikvee quan điểm là ngày nay các máy chủ thường xuất hiện dưới dạng các thùng chứa phù du chỉ phục vụ một trang web / dịch vụ duy nhất, vì vậy điều này có thể được đưa vào nginx.confmà không mất khả năng đọc. Điều này trái ngược với cách tiếp cận từ vài năm trước khi các máy chủ thường lưu trữ hàng chục trang web.
adamczi

38

Tôi muốn thêm vào các câu trả lời trước đó rằng điều quan trọng nhất không phải là cách bạn gọi các thư mục (mặc dù đó là một quy ước rất hữu ích), mà là những gì bạn thực sự đưa vào nginx.conf. Cấu hình ví dụ:

http {
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*.conf;
    include /etc/nginx/sites-enabled/my_own_conf;
...
}

Lệnh duy nhất được sử dụng ở đây là bao gồm , do đó không có sự khác biệt bên trong giữa eg conf.d/sites-enabled/.

Từ các tài liệu trên:

Syntax:     include file | mask;
Default:    —
Context:    any

Includes another file, or files matching the specified mask, 
into configuration. Included files should consist of 
syntactically correct directives and blocks.

Vì vậy, để trả lời câu hỏi ban đầu: không có sự khác biệt bên trong và bạn có thể sử dụng chúng theo cách tốt nhất có thể, ghi nhớ lời khuyên từ các câu trả lời khác. Và xin vui lòng, đừng quên chọn câu trả lời 'đúng'.


1
Phải, sites-enabledđã được phát minh ra một phần bởi một số quyền, làm mờ xung quanh như là một trung gian gây phiền nhiễu. Lấy nginx từ nguồn chính thức : bạn sẽ có được một sản phẩm cập nhật, cũng như thoát khỏi cấu hình crap / hell này.
Bernard Rosset

2
Điều này giải thích tại sao không có một tài liệu tham khảo nào về quy ước tên này trên tài liệu chính thức của Nginx. Đây là một dự án của bên thứ ba! github.com/perusio/nginx_ensite
AxeEffect

30

Thông thường, sites-enabledthư mục được sử dụng cho các định nghĩa máy chủ ảo, trong khi conf.dđược sử dụng cho cấu hình máy chủ toàn cầu. Nếu bạn đang hỗ trợ nhiều trang web - tức là máy chủ ảo - thì mỗi trang sẽ có tệp riêng, do đó bạn có thể bật và tắt chúng rất dễ dàng bằng cách di chuyển tệp vào và ra sites-enabled(hoặc tạo và xóa liên kết tượng trưng, ​​có thể là một ý tưởng tốt hơn).

Sử dụng conf.dcho những thứ như tải mô-đun, tệp nhật ký và những thứ khác không dành riêng cho một máy chủ ảo.

Cấu hình mặc định tham chiếu người dùng dữ liệu www? Tôi có phải tạo người dùng đó không?

Bạn nên có nginx chạy như một người dùng không root. Đây là trong một số trường hợp được đặt tên www-data, nhưng bạn có thể đặt tên cho nó bất cứ điều gì bạn muốn.

Làm cách nào để cung cấp cho người dùng quyền tối ưu để chạy nginx?

Tôi ít chắc chắn hơn về câu trả lời cho câu hỏi này (hiện tại tôi không chạy nginx), nhưng nếu nó giống như Apache thì câu trả lời là www-datangười dùng chỉ cần quyền đọc đối với bất kỳ tệp tĩnh nào (và đọc + thực thi trên các thư mục ) rằng bạn đang phục vụ hoặc đọc / thực thi quyền đối với những thứ như tập lệnh CGI và không có quyền ở bất kỳ nơi nào khác.


1
có một người dùng chuyên dụng để chạy máy chủ web cũng rất quan trọng do vô hiệu hóa khả năng đăng nhập cho người dùng này bằng cách xóa bản ghi shell hợp lệ.
DukeLion

> 'Bạn nên có nginx chạy như một người dùng không phải root' - bạn có thể nói rõ hơn về điều này không?
lfender6445

1
Chạy như một người dùng không có đặc quyền là một cách chứa đựng thiệt hại có thể xảy ra do sự thỏa hiệp từ xa. Nếu bạn đang chạy một máy chủ web rootvà có một sự thỏa hiệp từ xa nào đó, kẻ tấn công ngay lập tức có toàn quyền truy cập vào hệ thống. Khi chạy như một người dùng không có đặc quyền, quyền truy cập quản trị sẽ chỉ khả dụng khi kết hợp với một số loại khai thác cục bộ.
larsks

14

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-enabledlogic 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 includechỉ thị tiêu chuẩn /etc/nginx/nginx.conf.

Đây là một đoạn trích /etc/nginx/nginx.conftừ 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.conftừ 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.dsẽ đượ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.dcó 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 .confhậ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-availablevà bằng sites-enabledmọ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_ensitenginx_dissitecá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 nginxgó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 ý includechỉ 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-enabledvà bạn emacstạo một tệp sao lưu như thế default~thì đột nhiên, bạn có cả hai defaultvà đượ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-enabledlà ác quỷ thuần túy!


Ngoài tất cả những điều trên, rõ ràng, việc tạo ra các liên kết không chính xác cũng rất phổ biến! stackoverflow.com/a/14107804/1122270 Chỉ trong trường hợp bạn không nghĩ sites-enabledlà đủ độc ác!
cnst

Hoặc, đôi khi, có thể xảy ra việc ai đó quyết định chỉnh sửa các tệp trong đó sites-enabled, nhưng sau đó một người khác quyết định vô hiệu hóa nó bằng cách xóa nó, có thể nghĩ rằng đó chỉ là một liên kết tượng trưng, ​​yêu cầu kết xuất bộ nhớ nginx heap sau đó để khôi phục tệp conf: stackoverflow.com/q/45852224/1122270
cnst

Tôi phải không đồng ý với các xác nhận về sites-availablesites-enabled; điều quan trọng là có thể chuẩn bị các tệp cấu hình bên ngoài thư mục lấy 'sống' sao cho nếu nginx được tải lại hoặc khởi động lại thì nó sẽ không nhận được các tệp cấu hình một phần. Nó cũng có thể hữu ích để giữ các tệp cấu hình không còn được sử dụng. Tạo liên kết tượng trưng không phải là một nhiệm vụ đặc biệt khó khăn nếu bạn có đủ kinh nghiệm để quản lý nginx ngay từ đầu, IMO.
BE77Y

@ BE77Y bạn đang thực hiện một cách tiếp cận phức tạp hơn. Trong lập trình, nó được coi là thực hành tốt nhất để loại bỏ hoàn toàn mã không sử dụng, không chỉ vô hiệu hóa hoặc nhận xét nó ra; Tôi thấy không có lý do tại sao DevOps nên khác biệt - nếu không cần cấu hình nữa, hãy xóa nó (nó vẫn tồn tại trong VCS của bạn). Tương tự với các tệp conf một phần - tại sao bạn sẽ chỉnh sửa chúng được kích hoạt và nginx được tải lại sau lưng? ( USR1, mở lại nhật ký, không tải lại conf.) Tôi thấy các nhận xét "kinh nghiệm" liên kết tượng trưng của bạn bị đánh giá sai - vấn đề là vấn đề nhất quán, ít liên quan đến kinh nghiệm.
cnst

2
Rõ ràng rằng a) đây không phải là phương tiện thích hợp cho cuộc thảo luận này và có lẽ thậm chí quan trọng hơn, b) nó có khả năng không có kết quả trong mọi trường hợp. Hãy đồng ý không đồng ý.
BE77Y
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.