פרוקסי הפוך NGINX
-
@dovid כתב בפרוקסי הפוך NGINX:
@A0533057932 כתב בפרוקסי הפוך NGINX:
מה שקורה זה שהURL משתנה לדבר הבא
http://XXX.ovh/192.168.182.130בכתובת בדפדפן מכניסים XXX.ovh U
וזה משתנה למה שכתבת?כן
כמה שאלות:
א. הדומיין מפנה לשרת של הNGINX?הדומיין מפנה לIP של השרת ומגיע לVM שעליו יש את הNGINX הראשון
ב. בשרת של הNGINX, הפקודה curl 192.168.182.130 מחזירה תוצאה תקינה?
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
-
@A0533057932
אין לי תשובה. -
@A0533057932 כתב בפרוקסי הפוך NGINX:
אולי צריך להגדיר הגדרות מיוחדות בNGINX של שרת B?
לא.
לא צריך בכלל שיהיה nginx, אתה יכול לשלוח גם לgoogle.com בפרוקסי.
אני לא מדבר מניסיון אלא מסברא. -
@A0533057932 כתב בפרוקסי הפוך NGINX:
מה שקורה זה שהURL משתנה לדבר הבא
http://XXX.ovh/192.168.182.130 ולא באמת פונה לשרת Bאולי זה קורה בגלל ההדרים?
ניסית להגדיר כך?server { listen 80; server_name XXX.ovh; location / { proxy_pass http://192.168.182.130; } }
-
@A0533057932
מה הפלט שלcurl -I XXX.ovh
וגם הפלט של הרצת פקודה הבאה על השרת (של ה-nginx הראשון):
curl -I 192.168.182.130
-
@ליבל כתב בפרוקסי הפוך NGINX:
@A0533057932 כתב בפרוקסי הפוך NGINX:
מה שקורה זה שהURL משתנה לדבר הבא
http://XXX.ovh/192.168.182.130 ולא באמת פונה לשרת Bאולי זה קורה בגלל ההדרים?
ניסית להגדיר כך?server { listen 80; server_name XXX.ovh; location / { proxy_pass http://192.168.182.130; } }
כעת איפסתי את כל הגדרות הNGINX ובדקתי שוב
הפלט הזה מגיע למכונה השניה
אני בודק האם הוא גם יכול להפעיל בפועל דברים עליה
מעדכןהדומיין עצמו מגיע
תת הדומיין לא מגיע או ליתר דיוק לא עוהר לתיקיה שהוא אמור ללכת אליה -
@yossiz כתב בפרוקסי הפוך NGINX:
curl -I XXX.ovh
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 17 Feb 2023 11:05:19 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive
Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT
ETag: "5e9efe7d-264"
Accept-Ranges: bytes
X-Frame-Options: sameorigin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Content-Security-Policy: default-src https: data: 'unsafe-inline' 'unsafe-eval'
Referrer-Policy: strict-origincurl -I 192.168.182.130
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Fri, 17 Feb 2023 11:05:46 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT
Connection: keep-alive
ETag: "5e9efe7d-264"
Accept-Ranges: bytes -
פוסט זה נמחק!
-
אני רואה שהתשובה של @ליבל
server { listen 80; server_name XXX.ovh; location / { proxy_pass http://192.168.182.130; } }
עובדת כלומר הדומיין מגיע למכונה השניה ומעלה את הדף של נגינקס
רק החיסרון הוא שתת דומיין לא עובר לו
כלומר במעבר נמחק התת דומיין ולא מגיע בכלל למכונה השניה כך שהיא לא יודעת שאני פונה באמצעות תת דומיין
מעלה פלט של מה שביקש @yossiz (אני יודע שכתע זה IP פנימי אחר)ubuntu@mail:~$ curl -I 192.168.182.131 HTTP/1.1 200 OK Server: nginx/1.18.0 (Ubuntu) Date: Fri, 17 Feb 2023 11:25:22 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT Connection: keep-alive ETag: "5e9efe7d-264" Accept-Ranges: bytes ubuntu@mail:~$ curl -I pma.XXX.ovh HTTP/1.1 200 OK Server: nginx Date: Fri, 17 Feb 2023 11:25:28 GMT Content-Type: text/html Content-Length: 612 Connection: keep-alive Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT ETag: "5e9efe7d-264" Accept-Ranges: bytes X-Frame-Options: sameorigin X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: default-src https: data: 'unsafe-inline' 'unsafe-eval' Referrer-Policy: strict-origin ubuntu@mail:~$ curl -I XXX.ovh HTTP/1.1 200 OK Server: nginx Date: Fri, 17 Feb 2023 11:25:34 GMT Content-Type: text/html Content-Length: 612 Connection: keep-alive Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT ETag: "5e9efe7d-264" Accept-Ranges: bytes X-Frame-Options: sameorigin X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Content-Security-Policy: default-src https: data: 'unsafe-inline' 'unsafe-eval' Referrer-Policy: strict-origin ubuntu@mail:~$
לפי מה שזה נראה הן הדומיין והן התת דומיין מחזירים את אותה התגובה
-
@A0533057932 כתב בפרוקסי הפוך NGINX:
כלומר במעבר נמחק התת דומיין ולא מגיע בכלל למכונה השניה כך שהיא לא יודעת שאני פונה באמצעות תת דומיין
זה באמת בגלל הקוד של @ליבל. הא הסיר את ההעברה של הכותרת Host אז לשרת היעד אין מושג בשם איזה אתר פנו אליו, וזה מפעיל את אתר הdefault שיש בnginx.
-
פתאום אני מבין את הבעיה.
שאתה כותב את האייפי לבד בcurl הכל עובד כי הוא מחזיר את הdefault.
ואילו כשאתה כותב את ההעברה בפרוקסי המלאה כמו בתחילת הנושא אתה מקבל שגיאה/בעיה כי פשוט הדומיין/הסאב דומיין מוגדרים במחשב היעד באופן לא תקין.אתה יכול להיווכח בזאת בקלות ע"י הרצה של curl עם הhost המתאים:
curl 192.168.182.130 -H "Host: xxx.ovh";
אתה תראה שזה יחזיר בדיוק את אותה בעיה שזה מחזיר בדפדפן.
שאלת בתחילת הנושא אם הnginx של שרת היעד צריך הגדרה מסויימת וכתבתי לך שלא, אבל ברור שהוא צריך להיות מוגדר לטפל בדומיין/סאב דומיין המתאים ובואפן הראוי כאילו הוא זה שמקבל אותם במקור.
-
@dovid כתב בפרוקסי הפוך NGINX:
אתה תראה שזה יחזיר בדיוק את אותה בעיה שזה מחזיר בדפדפן.
לא בדיוק הבנתי, הרי כל דומיין\תת דומייין פונה ל IP, אז השרת הראשון יענה לו (כמובן בהתאם לפורט)
עכשיו אם אתה רוצה להפנות בהתאם לתת דומיין אז צריך להגדיר זאת בנפרד, כלומר מה זה קשור למה שכתבת ? -
@ליבל תת הדומיין לא עובר לסרבר
מבחינת הלוג של סרבר B אין בכלל קריאה לקובץ של תת הדומייןזה הקובץ כרגע בA
server { listen 80; server_name XXX.ovh pma.XXX.ovh; location / { proxy_pass http://192.168.182.131; } }
וזה מה שמוגדר במכונה B לדומיין הראשי
לדומיין הראשיserver { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } # A long browser cache lifetime can speed up repeat visits to your page location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ { access_log off; log_not_found off; expires 360d; } # disable access to hidden files location ~ /\.ht { access_log off; log_not_found off; deny all; } }
וזה לדומיין המשנה
server { listen 80; listen [::]:80; server_name pma.XXX.ovh; root /usr/share/phpmyadmin/; index index.php index.html index.htm index.nginx-debian.html; access_log /var/log/nginx/phpmyadmin_access.log; error_log /var/log/nginx/phpmyadmin_error.log; location / { try_files $uri $uri/ /index.php; } location ~ ^/(doc|sql|setup)/ { deny all; } location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /\.ht { deny all; } }
-
@ליבל כתב בפרוקסי הפוך NGINX:
השרת הראשון יענה לו
השרת הראשון עונה לו, והוא מוגדר נכון.
אז התשובה היא לפנות לשרת השני, ולהעביר את התשובה הזו ללקוח.
השרת השני מקבל בקשה עם Host של XXX.ovh ואז הוא עונה שטויות בגלל בעיית הגדרה.
אם השרת השני מקבל בקשה בלי הHost (כמו בהגדרות שנתת או כמו בcurl עם אייפי בלי דומיין) אז הוא עונה "לעניין" את הWelcome to nginx! שזה אתר הdefault שמוגדר שמה והוא תקין. -
@A0533057932 אז תנסה להוסיף את ההדרים (בשרת A) כאן
server { listen 80; server_name XXX.ovh pma.XXX.ovh; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://192.168.182.131; } }
-
@A0533057932 לא יודע אם היה לך פניות להבין מה שכתבתי,
אבל הפרוקסי מהתחלה עובד מעולה.
הבעיה היא שהnginx של השרת השני (הפנימי) לא מוגדר נכון לדומיין הרלוונטי.
כתבתי לך גם אפשרות לבדוק זאת בלי nginx בכלל ע"י curl מכל מחשב ברשת הפנימית, עם האייפי של היעד ועם התוספת, ככה:curl 192.168.182.130 -H "Host: xxx.ovh";
עריכה: כעת אני רואה שהוספת את ההגדרות של הnginx בשרת הפנימי.
צריך סבלנות ללמוד אותם, אבל הבעיה אך ורק בזה. -
@ליבל כתב בפרוקסי הפוך NGINX:
@A0533057932 אז תנסה להוסיף את ההדרים (בשרת A) כאן
server { listen 80; server_name XXX.ovh pma.XXX.ovh; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://192.168.182.131; } }
כעת זה עובר
אבל לא עולה דף וכל הקונסול מלא בשגיאה הבאה
Provisional headers are shown
נ.ב. השבתתי קאש
-
כעת בקיראה חפיפה של ההגדרות בשרת B.
ישנם שני הגדרות, אחת לשרת דיפולטי, כלומר לכל דומיין שבעולם לא דוקא דומיין ראשי.
השני ספציפית לדומיין pma.XXX.ovh.כעת אתה צריך להבין מה הבעיה בדומיין השני.
(את הגדרות הפרוקסי תשחזר למה שהיה בתחילת הנושא, זה היה 100% בסדר).