nginx แยกไฟล์การตั้งค่าขนาดใหญ่


17

ไฟล์การกำหนดค่าเริ่มต้นของ nginx ของฉันมีขนาดใหญ่มาก ฉันต้องการแยกให้เป็นไฟล์กำหนดค่าที่มีขนาดเล็กลงโดยแต่ละแห่งมีเพียงหนึ่งที่ตั้งสูงสุด 4 แห่งในแต่ละไฟล์เพื่อให้ฉันสามารถเปิด / ปิดใช้งานได้อย่างรวดเร็ว

ไฟล์จริงมีลักษณะดังนี้:

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....;
    }

ตอนนี้ถ้าฉันต้องการแยกมันให้มีเพียงไม่กี่ตำแหน่งในแต่ละไฟล์ (ตำแหน่งที่อยู่ด้วยกัน) สิ่งที่จะเป็นวิธีที่เหมาะสมในการทำโดยไม่ทำให้เกิดความสับสนวุ่นวาย (เช่นการประกาศรูทในแต่ละไฟล์ดังนั้นจึงมีเส้นทางแปลก ๆ พยายามค้นหาไฟล์) หรือไม่

คำตอบ:


24

คุณอาจกำลังมองหาincludeฟังก์ชั่นของ Nginx : http://nginx.org/en/docs/ngx_core_module.html#include

คุณสามารถใช้สิ่งนี้:

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

รวมถึงยอมรับสัญลักษณ์แทนดังนั้นคุณสามารถเขียนได้

include include/*.conf;

รวมไฟล์ .conf ทุก * ในไดเรกทอรีรวม


ฉันพิจารณาแล้ว แต่ข้ามไปเพราะจะหมายถึงการแก้ไขเนื้อหาของไฟล์แทนที่จะเพียงแค่ยกเลิกการเชื่อมโยงไฟล์ในโฟลเดอร์ที่เปิดใช้งานไซต์
oliverjkb

@ardukar ดังนั้นวิธีแก้ไขปัญหาของคุณคือใช้โฟลเดอร์ที่เปิดใช้งานไซต์หรือไม่
Mark Stosberg

ฉันเพียงเล็กน้อยสับสนตอนนี้ ...
FLXN

ขอโทษที่ตอบช้า! ดูเหมือนว่าฉันไม่ได้อ่านการแจ้งเตือน .. - .- ฉันใช้โซลูชันของ FLXN อยู่แล้ว แต่นั่นไม่ได้ทำให้ฉันมีความสุข เนื่องจากฉันกำลังสร้างเซิร์ฟเวอร์สำหรับ บริษัท ขนาดเล็กที่ซึ่งการดูแลระบบทำผ่านเบราว์เซอร์เพียงอย่างเดียวฉันไม่ต้องการเปลี่ยนแปลงไฟล์ หากบริการถูกปิดการใช้งานผ่านเบราว์เซอร์ฉันต้องการให้โฟลเดอร์ย่อย (พูดว่า 'location') ใน nginx ถูกปิดการใช้งานด้วยเช่นกันดังนั้นการยกเลิกการเชื่อมโยงไฟล์กำหนดค่าในโฟลเดอร์ที่เปิดใช้งานไซต์ดูเหมือนจะเป็นแนวคิดที่ดีที่สุด
oliverjkb

6

คุณสามารถสร้างโฟลเดอร์ไซต์ด้วย

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

# จากนั้นแยกyour_config.confไฟล์ขนาดใหญ่ของคุณเป็นไฟล์ขนาดเล็กลง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

(ฉันปรับปรุงจากแหล่งนี้: /programming//a/9635153/1069083 )

อย่าลืมเพิ่มสิ่งนี้ไว้ท้ายhttpบล็อกของคุณ/etc/nginx/conf.d/*.conf;:

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

หมายเหตุ: ความคิดเห็นภายนอกserverบล็อกจะถูกตัดลงที่ด้านล่างของแต่ละไฟล์ดังนั้นจึงไม่มีความคิดเห็นก่อนserverบล็อก ย้ายความคิดเห็นในบรรทัดแรกภายในบล็อกแทน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.