nginx chia tập tin cấu hình lớn


16

Tập tin cấu hình mặc định nginx của tôi đang trở nên rất lớn. Tôi muốn chia nó thành các tệp cấu hình nhỏ hơn, mỗi tệp chỉ bao gồm một, tối đa 4 vị trí cho mỗi tệp để tôi có thể bật / tắt chúng nhanh chóng.

Tập tin thực tế trông như thế này:

server {
    listen 80 default_server;
    root /var/www/

    location /1 {
        config info...;
    }

    location /2 {
        config info....;
    }        
    location /abc {
        proxy_pass...;
    }

    location /xyz {
        fastcgi_pass....;
    }
    location /5678ab {
        config info...;
    }

    location /admin {
        config info....;
    }

Bây giờ, nếu tôi muốn tách nó ra chỉ có một vài vị trí trong mỗi tệp (các vị trí thuộc về nhau), thì cách nào là hợp lý để làm điều đó mà không gây ra sự hỗn loạn (như khai báo root trong mỗi tệp, do đó có đường dẫn lạ đó là nginx cố gắng tìm tập tin)?

Câu trả lời:


22

Có lẽ bạn đang tìm kiếm includechức năng của Nginx : http://nginx.org/en/docs/ngx_core_module.html#include

Bạn có thể sử dụng nó như thế này:

server {
  listen 80;
  server_name example.com;
  […]
  include conf/location.conf;
}

bao gồm cả chấp nhận ký tự đại diện để bạn cũng có thể viết

include include/*.conf;

để bao gồm mọi tệp * .conf trong thư mục bao gồm .


Tôi đã xem xét điều này rồi nhưng đã bỏ qua nó, bởi vì nó có nghĩa là chỉnh sửa nội dung tệp, thay vì chỉ hủy liên kết các tệp trong thư mục hỗ trợ trang web.
oliverjkb

@ardukar vậy giải pháp của bạn là sử dụng thư mục kích hoạt trang web?
Mark Stosberg

Bây giờ tôi hơi bối rối ...
FLXN

Xin lỗi vì trả lời muộn như vậy! Có vẻ như tôi đã không đọc thông báo .. -.- Tôi đang sử dụng giải pháp của FLXN. Nhưng điều đó không làm tôi hạnh phúc. Vì tôi đang xây dựng một máy chủ cho một công ty nhỏ hơn, nơi việc quản trị chỉ được thực hiện thông qua Trình duyệt, tôi không muốn thực hiện các thay đổi bên trong một tệp. Nếu một dịch vụ bị vô hiệu hóa thông qua trình duyệt, tôi muốn thư mục con (giả sử 'vị trí') trong nginx cũng bị vô hiệu hóa, do đó hủy liên kết tệp cấu hình trong thư mục hỗ trợ trang web có vẻ là ý tưởng tốt nhất.
oliverjkb

5

Bạn có thể tạo các thư mục trang web với

mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled

# Và sau đó chia your_config.conftệp lớn của bạn thành các tệp nhỏ hơn thành sites-available/:

YOURCONF="/etc/nginx/conf.d/your_config.conf"
cd /etc/nginx
mkdir -p sites-available sites-enabled
cd  sites-available/
csplit "$YOURCONF" '/^\s*server\s*{*$/' {*}
for i in xx*; do
  new=$(grep -oPm1 '(?<=server_name).+(?=;)' $i|sed -e 's/\(\w\) /\1_/g'|xargs);
  if [[ -e $new.conf ]] ; then
    echo "" >>$new.conf
    cat "$i">>$new.conf
    rm "$i"
  else
    mv "$i" $new.conf
  fi
done

(Tôi đã nâng cao điều này từ nguồn này: /programming//a/9635153/1069083 )

Hãy chắc chắn để thêm phần này vào cuối bên trong httpkhối của bạn /etc/nginx/conf.d/*.conf;:

include /etc/nginx/sites-enabled/*.conf; 

Lưu ý: các bình luận bên ngoài các serverkhối được cắt vào dưới cùng của mỗi tệp, do đó không nên có bình luận TRƯỚC một serverkhối. thay vào đó, di chuyển các bình luận trong dòng đầu tiên bên trong khối.

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.