webpack хөгжүүлэлтийн серверийг VPN хаягаар хэрхэн үйлчлүүлэх вэ
Хөгжүүлэлтийн серверт хэн хүрэх ёстойгоос хамааран холболтын хаягийг сонгож, дараа нь хост нэрийн шалгалтыг хязгаарлаж, хуудас болон шууд дахин ачаалах сокет хоёулаа холбогдож байгааг баталгаажуулна уу.
Зөөврийн компьютер дээр хариулдаг, өөр газар хариулдаггүй хөгжүүлэлтийн сервер ихэвчлэн буруу хаягт холбогдсон байдаг. Холболтыг хүлээн авдаг ч хуудсыг татгалздаг сервер ихэвчлэн хост нэрийн шалгалтад алддаг. Эдгээр нь өөр өөр алдаа, өөр өөр засвар бөгөөд зөв тохиргоог сонгох нь ажлын талбарт хэн хүрэх ёстой, хэрхэн хүрэхээс хамаарна.
Гурван асуулт хариултыг тодорхойлно: хэн холбогдож байна, ямар хаягт хүрч чадах вэ, түүнд шууд дахин ачаалах ажиллах ёстой юу.
Тохиргооны файлаас биш, сокетоос эхэл
Ажиллаж байгаа процесс яг юунд холбогдсоныг түүнийг эхлүүлсэн ижил сүлжээний орчинд унш, учир нь контейнер эсвэл нэрийн орон зай хост бүрхүүл харж чадахгүй сокеттой байж болно. Сонсох багана эхний асуултад хариулна: зөвхөн локал зам, нэг тодорхой интерфейс эсвэл бүх интерфейс.
ss -ltn '( sport = :8080 )'
ss -ltnp | grep node
Loopback хаяг нь аюулгүй анхдагч бөгөөд алсын клиентэд хэрэггүй. Wildcard холболт нь тохиромжтой бөгөөд замтай бүх интерфейс дээр портыг нээдэг, энэ нь туннель зөөдөг машин дээр ихэнх хүмүүсийн санаж байгаагаас өргөн. Тодорхой хаяг нь дунд сонголт бөгөөд сокет үүсэх мөчид интерфейс тухайн хаягтай байвал л ажиллана. Ялгаа нь чухал, учир нь эдгээр гурван холболтын хоёр нь хөтч дээр ижил харагдаж, хоёр дахь интерфейс бий болмогц огт өөрөөр ажилладаг.
Зам эсвэл галт ханын дүрэмд хүрэхээс өмнө тэр ажиглалтад нийцүүл. Хэрэв процесс буруу хаяг дээр сонсож байгаа бол ямар ч бодлогын чиглүүлэлт клиентийг тэнд хүргэхгүй.
Холболтын хаягийг түүнд хэн хүрэх ёстойгоос хамааран сонго
Хэрэв энэ машин дээр зөвхөн танд хуудас хэрэгтэй бол loopback холболтыг хадгалаад зогсо. Хэрэв ижил туннель дээрх нэг хамт олонд хэрэгтэй бол туннелийн интерфейсийн хаягийг холбож, галт хана зөвхөн тэр эх сурвалжид зөвшөөрөх болтугай. Хөгжүүлэлтийн серверийг идэвхтэй туршиж буй хүмүүсээс цааш нийтлэх нь эцэстээ ажлын талбарыг интернетэд ил болгох зуршил юм.
Хэрэв контейнер доторх хөтч серверт хүрэх шаардлагатай бол холболтын хаяг нь контейнерийн сүлжээ чиглүүлж чадах хаяг байх ёстой бөгөөд энэ нь ихэвчлэн хост өөртөө шийддэг хаяг биш. Тохиргоог засахын өмнө тохиолдлыг шийд, учир нь гурван тохиолдол гурван өөр утга өгч, зөвхөн нэг нь зөв. Энд таамаглах нь тохируулгын бусад хэсгээс илүү цаг үрэх юм.
Дараа нь хаягийг таны эхлүүлэгч үнэхээр уншдаг хэлбэрээр тохируул. Тохиргооны файл болон серверийг программчлан бүтээдэг скрипт ижил сонголтуудыг хэрэглэдэггүй:
devServer: {
host: "10.77.0.20",
port: 8080,
allowedHosts: ["dev.corp.example"],
}
Тэр хэсэг дэх хаяг нь жишээ бөгөөд хост эзэмшдэг VPN хаягийг илэрхийлнэ. Хэрэв төсөл серверийг new WebpackDevServer(options, compiler) ашиглан бүтээдэг бол сонголтуудыг оронд нь конструкторын аргументаар дамжуул, учир нь webpack тохиргооны тусдаа devServer шинж чанарыг тэр замаар авч үздэггүй. Тохиргооны файл болон Node API-ийн хоорондох энэ ялгаа нь хэсгийг хэзээ ч уншдаггүй төсөлд хуулдаг хүмүүсийг барьдаг. dev-server баримт бичиг нь эхлүүлэх хоёр хэв маягийг ялгаж, ашиглаж буй хувилбартай тулгах ёстой лавлагаа юм.
Хост нэрийн шалгалтыг таны зөвшөөрсөн нэрстэй нийцүүл
Хост нэрийн шалгалт нь халдагчийн хяналтад байгаа нэрээс үйлчлэгдсэн хуудас хөтчөөр дамжуулан таны хөгжүүлэлтийн сервертэй ярихаас сэргийлэхэд байдаг. Үүнийг allowedHosts: "all" ашиглан унтраах нь тэр хамгаалалтыг арилгаж, дотоод үйлчилгээнд хүрч чаддаг машин дээр тэр тав тух нь ховор үнэ цэнэтэй. Хөтч ямар нэр илгээхийг мэдсэний дараа шалгалтыг зөв хангах нь хямд.
Таны ашиглах нарийн нэрсийг, туннелийн хаягт шийдэгддэг хувийн нэрийг оруулан жагсаа. Хэрэв клиент нэрийг таны холбосон хаягаас өөр хаягт шийдвэл та нэр шийдвэрлэх асуудалтай байна, серверийн тохиргооны асуудал биш, нэрийг зөвшөөрөгдсөн жагсаалтад нэмэх нь үүнийг засахгүй. Шийдвэрийг серверээс биш, клиентээс баталгаажуул.
Гурван хяналтыг толгой дээрээ тусдаа барь: холболтын хаяг аль интерфейс холболтыг хүлээн авахыг, зөвшөөрөгдсөн жагсаалт аль Host толгойг хүлээн авахыг, баталгаажуулалт хэнийг оруулахыг шийднэ. Зөвхөн гурав дахь нь хандалтын хяналт бөгөөд хөгжүүлэлтийн серверт ихэвчлэн байхгүй. Туннелийн хаяг ч баталгаажуулалтын механизм биш, учир нь тэнд чиглүүлж чадах хэн бүхэн таны найдаж байсан хил дотроос аль хэдийнээ байна.
Хуудас болон шууд дахин ачаалах сокетыг хамт шалга
Зорьсон клиентээс тохируулсан схемээр шинэ хүсэлт ачаалж, кэш биш үр дүнг унш. HTTPS-ийн хувьд хүлээгдэж буй хост нэр болон гэрчилгээний баталгаажуулалтыг хадгал, учир нь хөтчийн анхааруулга амжилттай хүлээн авалтын тест биш. Хуудас дүрслэгдэж байхад шууд дахин ачаалал чимээгүйхэн бүтэлгүйтэх нь энд хамгийн түгээмэл хэсэгчилсэн амжилт бөгөөд хурдан шалгалтын үеэр анзаарахгүй байх амархан.
curl -sS -o /dev/null -w "%{http_code} %{remote_ip}\n" http://dev.corp.example:8080/
curl -sS -i http://10.77.0.20:8080/ | head -n 5
Дараа нь хөтчийн сүлжээний диагностикийг нээж, WebSocket холболтыг ажигла. Хуудас нэг хост нэр, порт, схемээр ачаалагдаж, дахин ачаалах сокет өөрөөр ажиллаж болох тул хоёуланг нь тусад нь шалгах ёстой. Баримтжуулсан клиент URL-ийг зөвхөн байршуулсан зам үнэхээр өөр утга шаардсан үед тохируулж, клиентэд тойрог зам заахаас илүү замыг засахыг илүүд үз.
Сонсогчийн хаяг, хүлээн авсан нэр, зөвшөөрөгдсөн эх сурвалж, хоёр үр дүнг төслийн тэмдэглэлд бич. Тэр бичлэг ажлын талбарыг эхлүүлж, хуудас яагаад ачаалагддаг ч хэзээ ч сэргэдэггүй гэж гайхдаг дараагийн хүнд үлдэнэ.