NGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם
-
האם אפשר במקטע server אחד להאזין לפורט אחד דוקא בהינתן server_name מסויים, ולאחר בכל מקרה?
אבאר את הצורך:
יש לי כמה אתרים על אותו אייפי - 80.
אני רוצה לפנות לחלקם גם מתוך המכונה עצמה, ואז אני רוצה להשתמש בlocalhost, בלי להשתמש עם שם של שרת ותרגום כתובת (host או dns). כיון שיש כמה אתרים אני חייב לזהות את מי אני רוצה, אז אני רוצה לעשות זאת ע"י פורט פנימי יייחודי לכל אתר, אבל שלא יהיה נגיש מבחוץ.תודה לעונים!
-
@dovid אמר בNGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם:
האם אפשר במקטע server אחד...
בלי לענות על עצם השאלה, לכאורה אתה יכול לעשות קובץ נפרד לכל שרת, ואז לעשות שתי מקטעי server כזה
server { listen 80; server_name server1; include file1.conf; } server { listen 8080; include file1.conf; } server { listen 80; server_name server2; include file2.conf; } server { listen 8081; include file2.conf; }
האם זה עונה על הצרכים שלך?
-
בעצם הכי פשוט, למה לא לעשות
server { server_name server1 localhost; listen 80 8080 } server { server_name server1 localhost; listen 80 8081 }
ואז תיגש ל-server2 ככה:
http://localhost:8081/
ול-server1 גם בלי הפורט (כי אם שני מקטעים תואמים אז הראשון תקף)
-
@dovid אמר בNGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם:
יש לי כמה אתרים על אותו אייפי - 80.
אנג'נאיקס לא אמור בכלל להתערב לך בתעבורה הפנימית, אם אתה ניגש מתוך המכונה לכתובת http://127.0.0.1:5050/ זה לא עובר דרכו.
-
@יוסף-בן-שמעון אמר בNGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם:
@dovid אמר בNGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם:
יש לי כמה אתרים על אותו אייפי - 80.
אנג'נאיקס לא אמור בכלל להתערב לך בתעבורה הפנימית, אם אתה ניגש מתוך המכונה לכתובת http://127.0.0.1:5050/ זה לא עובר דרכו.
אתה מדבר במקרה שאנגינאיקס הוא פרוקסי למאזין אחר.
במקרה שלי הוא המאזין הבלעדי... אצלי זה PHP אבל קח דוגמא קבצים סטטיים.
ואין הבדל בין תעבורה פנימית לחיצונית מבחינתו, הוא מאזין. כדי למנוע תעבורה חיצונית צריך להשתמש עם deny, וallow על טוווחי אייפי, ואת זה אני לא יודע לשלב לפי הפורט, אמנם אני כמובן יכול לעשות מקטע סרבר אחר לגמרי. -
-
@dovid אמר בNGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם:
אני רוצה לפנות לחלקם גם מתוך המכונה עצמה, ואז אני רוצה להשתמש בlocalhost, בלי להשתמש עם שם של שרת ותרגום כתובת (host או dns)
@dovid אמר בNGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם:
כדי למנוע תעבורה חיצונית צריך להשתמש עם deny, וallow על טוווחי אייפי, ואת זה אני לא יודע לשלב לפי הפורט
אם אתה רוצה להאזין רק על 127.0.0.1 לא צריך שום deny, פשוט תגדיר
listen 127.0.0.1:8080
ותעשה כמו שכתבתי בפוסט השני שלי.
-
@yossiz העובדות הם לא ככה!
אכן דלא ככתוב פה https://stackoverflow.com/a/13643659/1271037
אבל הנה סימוכין לעובדות: https://serverfault.com/questions/667798/allow-only-local-users-in-nginx -
@dovid נו, הבאת שני מראי מקומות כמוני... מסתבר שגם העובדות הם ככה, לא?
This means that you don't need separate allow / deny directives inside your configuration with your use case, because the connections are limited lower in the network stack.
So, if you want to set nginx to bind to localhost, you'd change that to: listen 127.0.0.1:80;
In this way, requests that are not coming from localhost are discarded (they don't even hit nginx).למעשה לא הבנתי מתוך השאלה מה עיקר הבעיה, העיקר שלא תצטרך DNS להגיע לשרת? אז תכתוב
server_name localhost
אתה רוצה למנוע גישה מבחוץ, ואתה לא מאמין ש:
listen 127.0.0.1
מספיק? תשתמש בחומת האש.אתה צריך דוקא "במקטע server אחד להאזין לפורט אחד דוקא בהינתן server_name מסויים, ולאחר בכל מקרה"? אז נראה שבאמת אין אפשרות כזו.
-
@yossiz אמר בNGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם:
@dovid נו, הבאת שני מראי מקומות כמוני... מסתבר שגם העובדות הם ככה, לא?
This means that you don't need separate allow / deny directives inside your configuration with your use case, because the connections are limited lower in the network stack.
So, if you want to set nginx to bind to localhost, you'd change that to: listen 127.0.0.1:80;
In this way, requests that are not coming from localhost are discarded (they don't even hit nginx).ידידי, ניסיתי שוב לפני הכתיבה. עד שאתה לא בודק אל תגיד כלום.
אתה צודק שטעיתי בדברי הסימוכין. -
@dovid אמר בNGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם:
עד שאתה לא בודק אל תגיד כלום
טוב, אז כדי להוכיח שהפעם אני צודק עשיתי ניסוי [מדעי בתנאי מעבדה], וכמובן אני צודק.
אם היית צודק, זה היה באג ב-nginx. האם לא יותר מסתבר שיש באג בקונפיגרציה שלך?- תבדוק אם יש לך
listen
נוסף (אולי על IPv6?) - אולי שיחקת עם כללי iptables איכשהו וגרמת שתעבורה בממשקים חיצוניים מועברים ל-localhost (אולי משהו שקשור לנטפרי? סתם ניחוש... )?
- מה
netstat -a
מראה?
- תבדוק אם יש לך
-
@yossiz אמר בNGINX: להאזין לפורט מקומי גם ללא server_name, ובפורט חיצוני עם:
- תבדוק אם יש לך
listen
נוסף (אולי על IPv6?)
אכן.
בפועל זה לא עבד ואני לא מבין למה, ויותר מאוחר בעומקו של הלילה, זה פתאום עבד. אחרי שלוש מאות פעמים של ניסויים וnginx -s reload.
ואני מסכים איתך שזה מאה אחוז בעיה אצלי, וטעיתי לחשוב שהnginx לא מכבד את ההוראה כלל.תודה רבה על המאמץ!
- תבדוק אם יש לך