CentOS 8 -ב Nginx רובע םיסמוע ןזאמכ HAProxy תא ןיקתהל דציכ


.הרובעתה תצפהל םהינפל םיסמוע/ןזאמ תסירפ זאו םימושיי םתוא תא םיצירמ םלוכש םיתרש ץבקמ תרדגה ,אמגודל .םיסמוע ןוזיאו םיתרש לוכשא ןוגכ ,תוריתי תוגיצמה תויגולונכט םשייל םויכ לבוקמ ,םיהובג םיעו

HAProxy ההובג תונימזב בחרנ שומישב אצמנו חטבואמ ,ןימא ,םיהובג םיעוציב לעב ,קזח ,חותפ דוק אוה TCP/HTTP ףוסמו יסקורפ תרש ,סמוע ןוזיא SSL/TLS סיראלוס ,סקוניל הלעפה תוכרעמב םג הנימא הרוצב ל

.HAProxy -ב SSL/TLS םויס רידגהל דציכ םיגדמ םג הז .NGINX תשר יתרש לוכשאב הרובעתב הטילשל CentOS 8 -ב HAProxy םע ההובג תונימזל ידועיי םיסמוע ןוזיא רידגהל דציכ הארמ הז ךירדמ

.CentOS 8 לש תילמינימ הנקתה םע םיתרש 4 כ"הס

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

חוקלה תונוכמב Nginx HTTP תרש תרדגה :1 בלש

.גצומש יפכ dnf תוליבחה להנמ תועצמאב Nginx טנרטניאה תרש תא ןקתהו CentOS 8 -ב ךלש חוקלה תונוכמ לכל סנכיה .1

# dnf install Nginx

.(חוקלה תונוכמ לכב תאז השע) systemctl תודוקפ תועצמאב ,ובצמ תקידב ידי לע לעופ אוהש אדוו תכרעמה לוחתא תעב תיטמוטוא הלעפהל ותוא לעפה ,התע תעל ,Nginx תוריש תא לעפה ,ןכמ רחאל .2

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx

.(חוקלה תונוכמ לכב תאז השע) םישדחה םייונישה תא עצבל ידכ firewalld תוריש תא שדחמ ןעט ןכמ רחאל .Nginx טנרטניאה יתרשל .שאה תמוח ךרד רובעל סמועה תנזאממ תושקב רשפאל ידכ שאה תמוח תרוצתב HTTPS -ו

# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --zone=public --permanent --add-service=https
# firewall-cmd --reload

.יוארכ לעופ חוקלה בשחמב ןקתומה טנרטניאה תרשש איה תועמשמה ,Nginx לש הקידבה ףד תא האור התאש עגרב ,טוונל ידכ חוקלה לש IP -ב שמתשה .רדסב תדבוע Nginx תנקתה םא קודבו ךלש תוימוקמה תונוכמב טנרטניא

.HAProxy תרדגה תקידבל ךשמהב שמתשנ ןהב חוקלה תונוכמב הקידב יפד רוציל ונילע ,ןכמ רחאל .5

----------- Web Server #1 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

CentOS 8 -ב HAProxy תרש לש הרדגהו הנקתה :2 בלש

.האבה הדוקפה תלעפה ידי לע HAProxy תרשב HAProxy תליבח תא ןקתה תעכ .6

# dnf install haproxy

.ובצמ תא תמאו תכרעמה לוחתא תעב תיטמוטוא הלעפהל ותוא לעפה ,HAProxy תוריש תא לעפה ,ןכמ רחאל .7

# systemctl start haproxy
# systemctl enable haproxy
# systemctl status haproxy

.אבה הרוצתה ץבוק תועצמאב HAProxy -ה תא רידגנ תעכ .8

# vi /etc/haproxy/haproxy.cfg

.םיירקיע םיקלח העבראל קלוחמ הרוצתה ץבוק

    .לדחמה תורירבב שמתשנ הז ךירדמ רובע .(רמאמה ףוסב קפוסש רושיק) HAProxy -ה דועית תא ארק ,לדחמ תורירבו לדחמ תרירב תורדגה תחת תויורשפאה תנבהל

    9. HAProxy ה תיתשתב יתועמשמ דיקפת קחשת ותסירפ תעב- IT ךלש טנרטניאה יתרשל רוביח לכ יבגל תונבות לבקל ךל רשפאמ הז ;תיסיסב השירד איה ורובע םושיר תרדגה ןכלו ,ךלש.

    .דחא תרשמ רתוי לע זירכהל ןתינ .ןמוי תועדוה לבקיש (CentOS -ב לדחמ תרירבכ rsyslog ןוגכ) ילבולג Syslog תרש לע זירכמ (אבה ךסמה םוליצב שגדומ) ןמויה רטמרפ

    .rsyslog תחת HAProxy ןמוי תועדוה יוהיזל שמשמה ןקתמ לש לדחמה תרירב דוק אוה local2 -ו localhost (127.0.0.1) לע העיבצמ לדחמה תרירב תרוצת

    .etc/rsyslog.d/haproxy.conf/ לשמל ,etc/rsyslog.d/ הירפסב שדח ץבוק רוצ וא etc/rsyslog.conf/ -ל rsyslog הרוצתה ץבוק תא חתפ .HAProxy ןמוי תועדוה דבעלו לבקל דציכ rsyslog תרשל רפסל ךילע ,ןכמ רח

    # vi /etc/rsyslog.d/haproxy.conf
    

    .514 לדחמה תרירב תאיציב UDP םע ןמוי ףוסאל ידכ האבה הרוצתה תא קבדהו קתעה

    $ModLoad imudp 
    $UDPServerAddress 127.0.0.1 
    $UDPServerRun 514 
    

    .ליעל HAProxy תרוצתב רדגוהש ןקתמה דוק אוה local2 רשאכ ,םתרמוח לע ססבתהב םידרפנ ןמוי יצבק ינשל בותכל rsyslog -ל תורוהל ידכ הלא תורוש םג ףסוה

    local2.* 	/var/log/haproxy-traffic.log 
    local2.notice 	/var/log/haproxy-admin.log
    

    .םינורחאה םייונישה תא ליחהל ידכ rsyslog תוריש תא שדחמ לעפה זאו .ותוא רוגסו ץבוקה תא רומש .11

    # systemctl restart rsyslog
    

    .ימשרה דועיתב ןייעל ולכות דימת ,רטמרפ לכ לע טרופמ רבסהל סנכינ אל .אבה ןפואב ירוחאה בגהו הצקה תיזח לש לדחמה תרירב יפיעס תא הנשו HAProxy לש הרוצתה ץבוקל רוזח .back-end -ו םייתיזח proxies -ה

    .(9000) האיצילו (הז הרקמב הז לכל * ) הנותנ IP תבותכל ןיזאמ הצקמ bind רטמרפ .HAProxy תוקיטסיטטס ףדה תרשל שמשמה הנזאה עטק הרידגמ האבה הרוצתה

    .( http:// server_ip: 9000/stats רמולכ) URI/stats תועצמאב תשגל ןתינ וילא הקיטסיטטסה ףדל תרשפאמ הקיטסיטטסה תלעפה תרדגה

    .(ךתריחבל המסיסו שמתשמ םשב [ל"אוד תועצמאב ןגומ] -ו haproxy תא ףלחה) ףדל השיג תעב יסיסב תומיא תפסוהל תשמשמ הקיטסיטטסה תומיא תרדגה

    listen stats
        bind *:9000
        stats enable
        stats hide-version
        stats uri /stats
        stats admin if LOCALHOST
        stats auth haproxy:[email 
    

    .לעופ HAProxy וב בצמה תא רידגמ בצמה רטמרפ .(םכמעטל םש תתל ולכות) TL םשב תיזח עטק הרידגמ האבה הרוצתה .13

    .SSL תועצמאב התשענ אל איה םא ליגר HTTP -כ תבשחנ השקבה וז המגודב .השקבהמ ץלוחש ןכות סיסב לע הטלחה תלבקל שמשמ (השיג תרקב תמישר) acl רטמרפה

    .(80 האיצי ךרד וא) HTTP תועצמאב התשענ תינושארה השקבהש Nginx -ל עידוהל רזוע הז .השקבל HTTP תרתוכ תפסוהל תשמשמ http תרתוכ תרדגה תרתוכ תרדגה זאו

    .TL_web_servers הנפמ םהילא ,הז הרקמב ,backend יתרש תא הרידגמ use_backend וא default_backend תארוה

    .default_backend וא use_backend תארוה יפ לע תבתונמ אל השקב םא "ןימז אל תוריש 503"\האיגש ריזחת HAProxy -ש בל םיש

    frontend TL
        bind *:80
        mode http
        acl http  ssl_fc,not
        http-request set-header X-Forwarded-Protocol http if http
        default_backend TL_web_servers
    

    .וזה הריחבה תא תפקוע אל הדמתה תטיש םוש םא השקב דוביעל הצקה יתרש תא תרחוב HAProxy דציכ הרידגמ ןוזיאה תרדגה ובש backend עטק רידגהל ונילע זא .14

    .תינושארה הבוגתה תא ןתנש תרשה ההזמל ותוא רשקלו SERVERID םשב cookie ץבוק חוקל חולשל HAProxy -ל הרומ איה ,cookie תססובמ הדמתה תרשפאמ cookie -ה תארוה

    .תויורשפאו server_IP: port ,(websrv1 לשמל) sever_name טמרופב םרזה הלעמב םיתרשה תרדגהל תשמשמ תרשה תארוה

    .הקיטסיטטסה ףד לע חוודלו תרשה תונימז תא קודבל ךישמהל HAProxy -ל תרמואש הקידב איה תחא חתפמ תורשפא

    backend TL_web_servers
        mode http
        balance roundrobin
        option  httpchk HEAD /
        cookie SERVERUID insert indirect nocache
        server  websrv1 10.42.0.200:80 cookie websrv1 check
        server  websrv2 10.42.0.21:80  cookie websrv2 check
        server  websrv3 10.42.0.34:80  cookie websrv3 check
    

    .ותוא רוגסו ץבוקה תא רומש .אבה ךסמה םוליצב גצומש יפכ םירחא ירוחא הצקו תיזח יקלח לכ לע בגה

    .םישדחה םייונישה תא ליחהל ידכ HAProxy תוריש תא שדחמ לעפה תעכ .15

    # systemctl restart haproxy
    

    .שאה תמוח תורדגה תא שדחמ ןעטו הקיטסיטטסה ףדל השיגל שאה תמוחב 9000 תאיצי תא חתפ ,ןכ ומכ .אבה ןפואב חוקל תושקב לבקל ידכ שאה תמוחב םיחתפנ (433 האיצי) HTTPS -ו (80 האיצי) HTTP יתורישש אדו ,ןכמ

    # firewall-cmd --zone=public --permanent --add-service=http
    # firewall-cmd --zone=public --permanent –add-service=https
    # firewall-cmd --zone=public --permanent --add-port=9000/tcp
    # firewall-cmd --reload
    

    הקיטסיטטסב הייפצו HAProxy תרדגה תקידב :3 בלש

    .המדה לש רתאה םוחתב שמתשהל ונל רשפאל ידכ etc/hosts/ץבוקב האבה הרושה תא ףסוה ,םיתרשה לכל שגינ התא ונממש ימוקמה ינחלושה בשחמב .HAPrxoy תרדגה תא קודבל ןמזה עיגה .17

    10.42.0.247  www.tecmint.lan
    

    .רתאה םוחת וא תרשה תבותכ תועצמאב טוונו ןפדפד חתפ ןכמ רחאל .18

    http://10.42.0.247/
    OR
    http://www.tecmint.lan/
    

    .האבה תבותכב שמתשה ,HAProxy לש הקיטסיטטסה ףדל תשגל ידכ .19

    http://10.42.0.247:9000/stats
    

    .(auth stats רטמרפב ןייע) HAProxy לש הרוצתה ץבוקב תרדגהש המסיסהו שמתשמה םשב שמתשה ןכמ רחאל

    .רתוי הברה ךכ לכו הבוגת ינמז ,םייחכונ תושקב ירועיש ,ךלש םיתרשה תוניקת תא םיסכמה םידדמ גיצמה HAProxy לש הקיטסיטטסה ףדב תחנת ,תחלצומ תורבחתה רחאל

    .Back-end -ה יתרשמ דחא תא ונבצה ,עבצה ידוקל סחיב סוטטסה חוד לעופ דציכ םיגדהל ידכ

    תימצע המיתחב SSL תדועת תועצמאב HAProxy -ב HTTPS לש הרוצת תעיבק :4 בלש

    .SSL/TLS תקירפב שמתשנ הז ךירדמ רובע ךא ,HTTPS לש םיירקיע הרוצת יבצמ העבראב ךמות HAProxy .חוקלל HAProxy תרש ןיב תרושקתה לכ תחטבאל SSL/TLS רידגהל דציכ םיגדנ הזה ןורחאה קלחב .20

    .backend יתרשל הרורב הרובעתב רבחתמו חוקלה דצב העונתה תא חנעפמ SSL/TLS, HAProxy לש הקירפ בצמב

    .(ךסמה םוליצב שגדומש יפכ ,רושיאה תריצי ךלהמב ךלש הרבחה יטרפל םאתהב םאתהב תולאשה לע תונעל) גצומש יפכ חתפמהו רושיאה תריציב ליחתנ

    # mkdir /etc/ssl/tecmint.lan
    # cd /etc/ssl/tecmint.lan/
    # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
    # cd /etc/ssl/tecmint.lan/
    # cat tecmint.crt tecmint.key >tecmint.pem
    # ls -l
    

    .ימדקה קלחה תא ךורעו HAProxy (/etc/haproxy/haproxy.cfg) לש הרוצתה ץבוק תא חתפ ,ןכמ רחאל .21

    frontend TL
        bind *:80
        bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
        redirect  scheme  https  if  !{ ssl_fc }
        mode http
        acl http  ssl_fc,not
        acl https ssl_fc
        http-request set-header X-Forwarded-Protocol http if http
        http-request set-header X-Forwarded-Protocol https if https
        default_backend TL_web_servers
    

    .ותוא רוגסו ץבוקה תא רומש

    .םישדחה םייונישה תא ליחהל ידכ HAProxy תוריש תא שדחמ לעפה זאו .22

    # systemctl restart haproxy.service
    

    .ךישמהל ידכ םדקתמ לע ץחל ,תימצע המיתחב רושיאה ללגב האיגש גיצי ןפדפדה .תפסונ םעפ רתאל תשגל הסנו טנרטניא ןפדפד חתפ ,ןכמ רחאל .23

    .ךלש םושייה תושירדלו ךלש IT -ה תיתשתל םיאתיש ךכ םיסמוע ןוזיא רידגהלו ןנכתל ךילע ,ולשמ תושירד טס שי טנרטניא םושיי לכל !התע תעל לכה הז

    .הטמלש בושמה ספוט תועצמאב הבשחמ וא הלאש לכ םסרפל לוכי התא .HAProxy לש ןוגראה תסרג לש ימשרה דועיתב ןייע ,HAProxy -ב שמתשהל דציכ יללכ ןפואבו ,הז ךירדמב תושמשמה הרוצתה תויורשפאמ קלח לע תופסונ