ಪ್ರೊಹೋಸ್ಟರ್ > Блог > ಆಡಳಿತ > ಕುಬರ್ನೆಟ್ಸ್ ಜೊತೆಗಿನ ಜೀವನದಿಂದ: HTTP ಸರ್ವರ್ ಸ್ಪೇನ್ ದೇಶದವರಿಗೆ ಹೇಗೆ ಒಲವು ತೋರಲಿಲ್ಲ
ಕುಬರ್ನೆಟ್ಸ್ ಜೊತೆಗಿನ ಜೀವನದಿಂದ: HTTP ಸರ್ವರ್ ಸ್ಪೇನ್ ದೇಶದವರಿಗೆ ಹೇಗೆ ಒಲವು ತೋರಲಿಲ್ಲ
ಮೈಕ್ರೋಸಾಫ್ಟ್ ಕ್ಲೌಡ್ (ಅಜುರೆ) ನಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಸ್ಟಾಕ್ ವಾಸಿಸುವ ನಮ್ಮ ಕ್ಲೈಂಟ್ನ ಪ್ರತಿನಿಧಿಯು ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಿದ್ದಾರೆ: ಇತ್ತೀಚೆಗೆ, ಯುರೋಪಿನ ಕೆಲವು ಕ್ಲೈಂಟ್ಗಳಿಂದ ಕೆಲವು ವಿನಂತಿಗಳು ದೋಷ 400 ನೊಂದಿಗೆ ಕೊನೆಗೊಳ್ಳಲು ಪ್ರಾರಂಭಿಸಿದವು (ಕೆಟ್ಟ ವಿನಂತಿ) ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು .NET ನಲ್ಲಿ ಬರೆಯಲಾಗಿದೆ, ಕುಬರ್ನೆಟ್ಸ್ನಲ್ಲಿ ನಿಯೋಜಿಸಲಾಗಿದೆ...
ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಒಂದು API ಆಗಿದೆ, ಅದರ ಮೂಲಕ ಎಲ್ಲಾ ಟ್ರಾಫಿಕ್ ಅಂತಿಮವಾಗಿ ಬರುತ್ತದೆ. ಈ ದಟ್ಟಣೆಯನ್ನು HTTP ಸರ್ವರ್ ಆಲಿಸುತ್ತದೆ ಕೆಸ್ಟ್ರೆಲ್, .NET ಕ್ಲೈಂಟ್ನಿಂದ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ಪಾಡ್ನಲ್ಲಿ ಹೋಸ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಡೀಬಗ್ ಮಾಡುವುದರೊಂದಿಗೆ, ಸಮಸ್ಯೆಯನ್ನು ಸ್ಥಿರವಾಗಿ ಪುನರುತ್ಪಾದಿಸುವ ನಿರ್ದಿಷ್ಟ ಬಳಕೆದಾರರಿದ್ದಾರೆ ಎಂಬ ಅರ್ಥದಲ್ಲಿ ನಾವು ಅದೃಷ್ಟಶಾಲಿಯಾಗಿದ್ದೇವೆ. ಆದಾಗ್ಯೂ, ಸಂಚಾರ ಸರಪಳಿಯಿಂದ ಎಲ್ಲವೂ ಜಟಿಲವಾಗಿದೆ:
ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು tcpdump ಮಾತ್ರ ಸಹಾಯ ಮಾಡುತ್ತದೆ ಎಂದು ತೋರುತ್ತದೆ ... ಆದರೆ ನಾನು ಸಂಚಾರ ಸರಪಳಿಯ ಬಗ್ಗೆ ಪುನರಾವರ್ತಿಸುತ್ತೇನೆ:
ತನಿಖೆ
ನಿಸ್ಸಂಶಯವಾಗಿ, ದಟ್ಟಣೆಯನ್ನು ಆಲಿಸುವುದು ಉತ್ತಮ ನಿರ್ದಿಷ್ಟ ನೋಡ್ನಲ್ಲಿ, ಅಲ್ಲಿ ಕುಬರ್ನೆಟ್ಸ್ ಪಾಡ್ ಅನ್ನು ನಿಯೋಜಿಸಿದ್ದಾರೆ: ಡಂಪ್ನ ಪರಿಮಾಣವು ಕನಿಷ್ಠ ಏನನ್ನಾದರೂ ತ್ವರಿತವಾಗಿ ಹುಡುಕಲು ಸಾಧ್ಯವಾಗುವಂತೆ ಇರುತ್ತದೆ. ಮತ್ತು ವಾಸ್ತವವಾಗಿ, ಅದನ್ನು ಪರಿಶೀಲಿಸುವಾಗ, ಈ ಕೆಳಗಿನ ಚೌಕಟ್ಟನ್ನು ಗಮನಿಸಲಾಯಿತು:
ಡಂಪ್ ಅನ್ನು ಹತ್ತಿರದಿಂದ ಪರಿಶೀಲಿಸಿದಾಗ, ಪದವು ಗಮನಕ್ಕೆ ಬಂದಿತು M.laga. ಸ್ಪೇನ್ನಲ್ಲಿ M.laga ನಗರವಿಲ್ಲ ಎಂದು ಊಹಿಸುವುದು ಸುಲಭ (ಆದರೆ ಇದೆ ಮಲಗಾ) ಈ ಕಲ್ಪನೆಯನ್ನು ವಶಪಡಿಸಿಕೊಂಡು, ನಾವು ಪ್ರವೇಶ ಸಂರಚನೆಗಳನ್ನು ನೋಡಿದ್ದೇವೆ, ಅಲ್ಲಿ ಒಂದು ತಿಂಗಳ ಹಿಂದೆ ಸೇರಿಸಿದದನ್ನು ನಾವು ನೋಡಿದ್ದೇವೆ (ಕ್ಲೈಂಟ್ನ ಕೋರಿಕೆಯ ಮೇರೆಗೆ) "ನಿರುಪದ್ರವ" ತುಣುಕು:
ಈ ಹೆಡರ್ಗಳ ಫಾರ್ವರ್ಡ್ ಮಾಡುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ನಂತರ, ಎಲ್ಲವೂ ಸರಿಯಾಗಿದೆ! (ಅಪ್ಲಿಕೇಶನ್ಗೆ ಇನ್ನು ಮುಂದೆ ಈ ಹೆಡರ್ಗಳ ಅಗತ್ಯವಿಲ್ಲ ಎಂದು ಶೀಘ್ರದಲ್ಲೇ ಸ್ಪಷ್ಟವಾಯಿತು.)
ಈಗ ಸಮಸ್ಯೆಯನ್ನು ನೋಡೋಣ ಹೆಚ್ಚು ಸಾಮಾನ್ಯವಾಗಿ. ಟೆಲ್ನೆಟ್ ವಿನಂತಿಯನ್ನು ಮಾಡುವ ಮೂಲಕ ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ ಅದನ್ನು ಸುಲಭವಾಗಿ ಪುನರುತ್ಪಾದಿಸಬಹುದು localhost:80:
ಹಿಂತಿರುಗುತ್ತಾರೆ 400 Bad request - ಅಪ್ಲಿಕೇಶನ್ ಲಾಗ್ನಲ್ಲಿ ನಾವು ಈಗಾಗಲೇ ನಮಗೆ ಪರಿಚಿತವಾಗಿರುವ ದೋಷವನ್ನು ಸ್ವೀಕರಿಸುತ್ತೇವೆ:
{
"@t":"2019-03-31T12:59:54.3746446Z",
"@mt":"Connection id "{ConnectionId}" bad request data: "{message}"",
"@x":"Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Malformed request: invalid headers.n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.TryParseRequest(ReadResult result, Boolean& endConnection)n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.<ProcessRequestsAsync>d__185`1.MoveNext()",
"ConnectionId":"0HLLLR1J974L9",
"message":"Malformed request: invalid headers.",
"EventId":{
"Id":17,
"Name":"ConnectionBadRequest"
},
"SourceContext":"Microsoft.AspNetCore.Server.Kestrel",
"ThreadId":71
}
ಫಲಿತಾಂಶಗಳು
ನಿರ್ದಿಷ್ಟವಾಗಿ ಕೆಸ್ಟ್ರೆಲ್ ಸಾಧ್ಯವಿಲ್ಲ ಸಾಕಷ್ಟು ದೊಡ್ಡ ಸಂಖ್ಯೆಯ ನಗರಗಳ ಹೆಸರುಗಳಲ್ಲಿ ಒಳಗೊಂಡಿರುವ UTF-8 ನಲ್ಲಿ ಸರಿಯಾದ ಅಕ್ಷರಗಳೊಂದಿಗೆ HTTP ಹೆಡರ್ಗಳನ್ನು ಸರಿಯಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿ.
ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ ಹೆಚ್ಚುವರಿ ಅಂಶವೆಂದರೆ ಕ್ಲೈಂಟ್ ಪ್ರಸ್ತುತ ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ ಕೆಸ್ಟ್ರೆಲ್ ಅನುಷ್ಠಾನವನ್ನು ಬದಲಾಯಿಸಲು ಯೋಜಿಸುವುದಿಲ್ಲ. ಆದಾಗ್ಯೂ, AspNetCore ನಲ್ಲಿಯೇ ಸಮಸ್ಯೆಗಳು (No.4318, No.7707) ಇದು ಸಹಾಯ ಮಾಡುವುದಿಲ್ಲ ಎಂದು ಅವರು ಹೇಳುತ್ತಾರೆ ...
ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಹೇಳುವುದಾದರೆ: ಟಿಪ್ಪಣಿ ಇನ್ನು ಮುಂದೆ ಕೆಸ್ಟ್ರೆಲ್ ಅಥವಾ ಯುಟಿಎಫ್ -8 (2019 ರಲ್ಲಿ?!) ನ ನಿರ್ದಿಷ್ಟ ಸಮಸ್ಯೆಗಳ ಬಗ್ಗೆ ಅಲ್ಲ, ಆದರೆ ವಾಸ್ತವದ ಬಗ್ಗೆ ಸಾವಧಾನತೆ ಮತ್ತು ಸ್ಥಿರ ಅಧ್ಯಯನ ಸಮಸ್ಯೆಗಳನ್ನು ಹುಡುಕುತ್ತಿರುವಾಗ ನೀವು ತೆಗೆದುಕೊಳ್ಳುವ ಪ್ರತಿಯೊಂದು ಹೆಜ್ಜೆಯೂ ಬೇಗ ಅಥವಾ ನಂತರ ಫಲ ನೀಡುತ್ತದೆ. ಒಳ್ಳೆಯದಾಗಲಿ!