Score:1

ห้องนักบินผ่าน NGINX - การตั้งค่าทำให้บริการอื่นไม่สามารถเข้าถึงได้

ธง cn

ฉันมีเซิร์ฟเวอร์ (Ubuntu-Server) ที่มีเซิร์ฟเวอร์ที่ใช้ Docker (Gitlab, Redmine) และ NGINX เป็นพร็อกซี

gitlab.<myserver> => NGINX -> <docker-net-ip>:port => คอนเทนเนอร์ Gitlab  
redmine.<myserver> => NGINX -> <docker-net-ip>:port => คอนเทนเนอร์ Redmine
                                                         คอนเทนเนอร์ SQL  
                                                         เซอร์บอท  

งานนี้เหมือนจับใจ ตอนนี้ฉันต้องการขยายเซิร์ฟเวอร์ของฉันโดย Cockpit Web Service:

ห้องนักบิน<myserver> => NGINX -> localhost:9090 => ห้องนักบินทำงานบนเซิร์ฟเวอร์  
gitlab.<myserver> => NGINX -> <docker-net-ip>:port => คอนเทนเนอร์ Gitlab  
redmine.<myserver> => NGINX -> <docker-net-ip>:port => คอนเทนเนอร์ Redmine
                                                         คอนเทนเนอร์ SQL  
                                                         เซอร์บอท  

ฉันได้เพิ่มกฎ NGINX พิเศษ (สอดคล้องกับ https://github.com/cockpit-project/cockpit/wiki/Proxying-Cockpit-over-NGINX) สำหรับห้องนักบินและจากนั้นห้องนักบินก็พร้อมใช้งาน แต่ไม่มี Redmine หรือ Gitlabถ้าฉันลบกฎออก มันก็กลับกัน

ใน /etc/nginx/sites-available/ และ /etc/nginx/sites-enabled/ มีการจัดเก็บกฎ NGINX ต่อไปนี้:

gitlab.<เซิร์ฟเวอร์ของฉัน>

เซิร์ฟเวอร์ {

    ฟัง 80;
    ฟัง [::]:80;

    server_name gitlab.<myserver>;

    ที่ตั้ง / {
        proxy_pass http://<docker-net-ip>:พอร์ต;
        ปิด proxy_buffering;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

redmine.<เซิร์ฟเวอร์ของฉัน>

เซิร์ฟเวอร์ {

    ฟัง 80;
    ฟัง [::]:80;

    server_name redmine.<myserver>;

    ที่ตั้ง / {
        proxy_pass http://<docker-net-ip>:พอร์ต;
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

และตอนนี้ฉันเพิ่ม:
ห้องนักบิน.<myserver>

เซิร์ฟเวอร์ {
    ฟัง 80;
    ฟัง 443 ssl;

    ห้องนักบิน server_name.<myserver>;

    ที่ตั้ง / {
        # จำเป็นต้องพร็อกซีการเชื่อมต่อกับห้องนักบิน
        proxy_pass https://127.0.0.1:9090;
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Forwarded-Proto $scheme;

        # จำเป็นสำหรับเว็บซ็อกเก็ตในการทำงาน
        proxy_http_version 1.1;
        ปิด proxy_buffering;
        proxy_set_header อัพเกรด $http_upgrade;
        proxy_set_header การเชื่อมต่อ "อัพเกรด";

        # ส่งส่วนหัว ETag จากห้องนักบินไปยังลูกค้า
        # ดู: https://github.com/cockpit-project/cockpit/issues/5239
        gzip ปิด;
    }
}

และ /etc/cockpit/cockpit.conf

[บริการเว็บ]
ต้นกำเนิด = https://cockpit.<myserver> 127.0.0.1:9090
ProtocolHeader = X-ส่งต่อโปรโต

[บันทึก]
ร้ายแรง = /var/log/cockpit.log

[การประชุม]
IdleTimeout=15

มีอะไรหายไปที่นี่?

Alex44 avatar
cn flag
มันแก้ได้แล้ว...
Score:1
ธง cn

มีอะไรหายไปที่นี่?

ปัญหาไม่ได้เกิดกับทุกอุปกรณ์ บางคนแสดงให้เห็นว่า "การเชื่อมต่อนี้ไม่ปลอดภัย" สำหรับ redmine และ gitlab แต่ห้องนักบินไม่ได้ วิธีแก้ปริศนาคือตอนนี้ กฎสำหรับ Gitlab และ Redmine ยังไม่สมบูรณ์ และคำขอ https ติดขัดตรงไหน

ไม่มีกฎสำหรับพอร์ต 443 (https) ตอนนี้ฉันเปลี่ยนบล็อกเป็นสอง:

  1. เปลี่ยนเส้นทางคำขอ http เป็น https
  2. ฟังคำขอ https และส่งต่อไปยังแอปพลิเคชัน

ตอนนี้มีลักษณะดังนี้:

/etc/nginx/sites-available/gitlab.<myserver> ที่เชื่อมโยงกับ /etc/nginx/sites-enabled/gitlab.<myserver>

# เปลี่ยนเส้นทางคำขอ http ไปที่ https ในขณะที่เก็บคำขอ uri
เซิร์ฟเวอร์ {

    ฟัง 80;
    ฟัง [::]:80;

    server_name gitlab.<myserver>;

    ส่งคืน 301 https://gitlab.<myserver>$request_uri;
}

คำขอ # https จะถูกส่งต่อไปยังแอปพลิเคชันเซิร์ฟเวอร์
เซิร์ฟเวอร์ {

    ฟัง 443 ssl;
    ฟัง [::]:443 ssl;

    server_name gitlab.<myserver>;

    ที่ตั้ง / {
        proxy_pass http://<นักเทียบท่า-net-ip>:<พอร์ต>;
        ปิด proxy_buffering;
        proxy_set_header X-Real-IP $remote_addr;

        # หมายเหตุ: คุณควรปิดการใช้งาน gzip สำหรับการรับส่งข้อมูล SSL
        # ดู: https://bugs.debian.org/773332
        gzip ปิด;
    }
}

/etc/nginx/sites-available/redmine.<myserver> ที่เชื่อมโยงกับ /etc/nginx/sites-enabled/redmine.<myserver>

# เปลี่ยนเส้นทางคำขอ http ไปที่ https ในขณะที่เก็บคำขอ uri
เซิร์ฟเวอร์ {

    ฟัง 80;
    ฟัง [::]:80;

    server_name redmine.<myserver>;

    ส่งคืน 301 https://redmine.<myserver>$request_uri;
}

คำขอ # https จะถูกส่งต่อไปยังแอปพลิเคชันเซิร์ฟเวอร์
เซิร์ฟเวอร์ {

    ฟัง 443 ssl;
    ฟัง [::]:443 ssl;

    server_name redmine.<myserver>;

    ที่ตั้ง / {
        proxy_pass http://<นักเทียบท่า-net-ip>:<พอร์ต>;
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-ส่งต่อสำหรับ $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # หมายเหตุ: คุณควรปิดการใช้งาน gzip สำหรับการรับส่งข้อมูล SSL
        # ดู: https://bugs.debian.org/773332
        gzip ปิด;
    }
}

/etc/nginx/sites-available/cockpit.<myserver> ที่เชื่อมโยงกับ /etc/nginx/sites-enabled/cockpit.<myserver>

เซิร์ฟเวอร์ {
    ฟัง 80;
    ฟัง 443 ssl;

    ห้องนักบิน server_name.<myserver>;

    ที่ตั้ง / {
        # จำเป็นต้องพร็อกซีการเชื่อมต่อกับห้องนักบิน
        proxy_pass https://127.0.0.1:9090;
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Forwarded-Proto $scheme;

        # จำเป็นสำหรับเว็บซ็อกเก็ตในการทำงาน
        proxy_http_version 1.1;
        ปิด proxy_buffering;
        proxy_set_header อัพเกรด $http_upgrade;
        proxy_set_header การเชื่อมต่อ "อัพเกรด";

        # ส่งส่วนหัว ETag จากห้องนักบินไปยังลูกค้า
        # ดู: https://github.com/cockpit-project/cockpit/issues/5239
        gzip ปิด;
    }
}

และ /etc/cockpit/cockpit.conf

[บริการเว็บ]
ต้นกำเนิด = https://cockpit.<myserver> 127.0.0.1:9090
ProtocolHeader = X-ส่งต่อโปรโต

[บันทึก]
ร้ายแรง = /var/log/cockpit.log

[การประชุม]
IdleTimeout=15

และเพื่อให้สมบูรณ์:
/etc/nginx/sites-available/default ที่เชื่อมโยงกับ /etc/nginx/sites-enabled/default

##
# คุณควรดู URL ต่อไปนี้เพื่อทำความเข้าใจที่แน่นอน
# ของไฟล์การกำหนดค่า Nginx เพื่อปลดปล่อยพลังของ Nginx ได้อย่างเต็มที่
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# ในกรณีส่วนใหญ่ ผู้ดูแลระบบจะลบไฟล์นี้ออกจากไซต์ที่เปิดใช้งาน/ และ
# ปล่อยให้เป็นข้อมูลอ้างอิงภายในไซต์ที่มีอยู่ซึ่งจะยังคงอยู่ต่อไป
# อัปเดตโดยทีมบรรจุภัณฑ์ nginx
#
# ไฟล์นี้จะโหลดไฟล์การกำหนดค่าที่ผู้อื่นให้มาโดยอัตโนมัติ
# แอปพลิเคชัน เช่น Drupal หรือ WordPress แอปพลิเคชันเหล่านี้จะทำขึ้น
# อยู่ภายใต้เส้นทางที่มีชื่อแพ็คเกจนั้น เช่น /drupal8
#
# โปรดดู /usr/share/doc/nginx-doc/examples/ สำหรับตัวอย่างโดยละเอียดเพิ่มเติม
##

# การกำหนดค่าเซิร์ฟเวอร์เริ่มต้น
#
เซิร์ฟเวอร์ {
    ฟัง 80 default_server;
    ฟัง [::]:80 default_server;

    # การกำหนดค่า SSL
    #
    # ฟัง 443 ssl default_server;
    # ฟัง [::]:443 ssl default_server;
    #
    # หมายเหตุ: คุณควรปิดการใช้งาน gzip สำหรับการรับส่งข้อมูล SSL
    # ดู: https://bugs.debian.org/773332
    #
    # อ่านข้อมูลเพิ่มเติมเกี่ยวกับ ssl_ciphers เพื่อให้แน่ใจว่ามีการกำหนดค่าที่ปลอดภัย
    # ดู: https://bugs.debian.org/765782
    #
    # ใบรับรองที่ลงนามด้วยตนเองที่สร้างขึ้นโดยแพ็คเกจ ssl-cert
    # ห้ามใช้ในเซิร์ฟเวอร์ที่ใช้งานจริง!
    #
    # รวมตัวอย่าง/snakeoil.conf;

    รูท /var/www/html;

    error_log /opt/logs/certbot_error ดีบัก;
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา