Qatlamni QGIS’da ochasiz va u chiziladi. Xuddi shu VPN’dagi hamkasbingiz xuddi shu qatlam uchun xatolik oladi. Kimdir VPN buzilgan deb xulosa qiladi va keyingi soat ma’lumotlar bazasini ko‘chirish yoki ikkalasiga ham hech qachon kerak bo‘lmagan portni ochish bilan o‘tadi. Ish stolidan ketayotgan so‘rov va GeoServer PostGIS’ga yuboradigan so‘rov turli mashinalardan, turli tarmoq nomlar fazosida, turli hisob ma’lumotlari bilan chiqadi. Bu ikki yo‘lni ajratish diagnostikaning katta qismidir.

Ikki ulanish, ikki manba

QGIS  ->  client's permitted path (often the VPN)  ->  GeoServer listener
GeoServer -> server's permitted path  ->  PostGIS listener

Ikkinchi o‘q birinchi kompyuterning tunnelini meros olmaydi. Konteynerdagi GeoServer konteynerning tarmoq stekiga ega, xostnikiga emas, va ko‘prik tarmog‘idagi konteyner xost yeta olmaydigan ma’lumotlar bazasiga yetishi mumkin yoki aksincha. Shuning uchun bir xil foydalanuvchi bir sessiyada ham muvaffaqiyat qozonishi, ham muvaffaqiyatsiz bo‘lishi mumkin — javob keshdan keldimi yoki yangi so‘rovdanmi, shunga bog‘liq.

What you testedWhat it proves
Portal page or GetCapabilitiesHTTP reachability to GeoServer only
A tile served from cachenothing about the database
GetMap for an uncached layera datastore query had to happen

Haqiqatan muvaffaqiyatsiz bo‘lgan qadamni toping

Xizmat darajasidagi rad etish, o‘z ma’lumotlar omboriga yetmaydigan rasm so‘rovi va bitta qatlamdagi ruxsat muammosi brauzer yorlig‘ida bir xil ko‘rinadi, server jurnalida esa butunlay boshqacha. Aniq operatsiyani so‘rang, so‘ngra xuddi shu vaqt belgisi uchun serverning o‘z hodisasini o‘qing.

curl -s -o /dev/null -w '%{http_code}\n' \
  "https://gis.example.com/geoserver/wms?service=WMS&version=1.3.0&request=GetCapabilities"

curl -s -o /tmp/tile.png -w '%{http_code} %{size_download}\n' \
  "https://gis.example.com/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&layers=corp:parcels&bbox=-13650000,4500000,-13600000,4550000&width=256&height=256&srs=EPSG:3857&format=image/png"

Ikkinchi so‘rovning ishonchli rasm bilan qaytgan 200 javobi ma’lumotlar ombori javob berganini isbotlaydi. Xizmat istisnosi hujjati bilan qaytgan 200 esa javob bermaganini isbotlaydi, va istisno matni odatda mijozni emas, omborni nomlaydi.

Ma’lumotlar omborini server tomonidan o‘qing

GeoServer’ning PostGIS ma’lumotnomasi omborga nima kerakligini sanab o‘tadi: xost, port, ma’lumotlar bazasi va hisob ma’lumotlari. Bularning barchasi GeoServer ochadigan ulanishni tasvirlaydi. Ularning hech biri ish stoli mijozi tomonidan kirishni tasvirlamaydi. Bu to‘rt maydonni serverning tarmoq konteksti haqidagi bayonot sifatida o‘qing, shunda «ularnikida ishlaydi» chiptalarining butun sinfi hal qilinadigan bo‘ladi.

Shuning uchun localhost ma’lumotlar omborida shunchalik keng tarqalgan xato. Bu GeoServer jarayonining o‘z tarmoq kontekstini bildiradi. Agar GeoServer Docker’da ishlayotgan bo‘lsa-yu, PostGIS xostda ishlayotgan bo‘lsa, localhost konteyner ichiga ishora qiladi va hech narsa topmaydi, va hech qanday VPN sozlamasi buni o‘zgartirmaydi.

Serverda marshrut, tinglovchi va autentifikatsiya siyosatini shu tartibda tekshiring. PostgreSQL’ning xostga asoslangan autentifikatsiyasi o‘zi ko‘radigan manba manzilini taqqoslaydi, uni shlyuz tarjima qilishi mumkin, shuning uchun HBA fayliga mijoz VPN hovuzini qo‘shish server tomonidagi ulanishni kamdan-kam tuzatadi. Server qilgandek sinab ko‘ring: bir xil xost, bir xil port, bir xil foydalanuvchi. Agar bu sinov muvaffaqiyatli bo‘lib, GeoServer hali ham muvaffaqiyatsiz bo‘lsa, farq ma’lumotlar bazasida emas, jarayon kontekstida.

ip route get 10.20.5.11
ss -tnp | grep 5432
psql "host=10.20.5.11 dbname=gis user=geoserver" -c 'select 1'

Hovuzlar va keshlar o‘zgarishlar davomida holatni saqlaydi

Ma’lumotlar omborining ulanish hovuzlari soketlarni ochiq tutadi. Hovuz yaratilgandan bir soat keyin paydo bo‘lgan tunnel hovuzga yangi yo‘l berishi shart emas, va bo‘sh ulanish o‘lik marshrutda qolishi mumkin, toki tekshiruv yoki vaqt chegarasi uni yopsin. O‘rnatilgan omborning tekshiruv sozlamalarini ko‘ring, tiklanishni taxmin qilish o‘rniga, va qaysi qatlam muvaffaqiyatsiz bo‘lganini bilmasdan butun xizmatni qayta ishga tushirish vasvasasidan saqlaning.

Plitka keshlari bu muammoning ko‘zgu tasvirini yaratadi: ular ma’lumotlar bazasi ulanishi uzilgandan keyin ham uzoq vaqt to‘g‘ri ko‘rinadigan xaritani taqdim eta oladi. «Yordam beradimi» deb keshni tozalash qaysi yo‘l tirik bo‘lganini aytadigan yagona dalilni yo‘q qiladi.

Ikkala manbani nomlab topshiring

Tez tuzatish oladigan tavsif ikki narsani nomlaydi: GeoServer’ga yetib borgan mijoz so‘rovi va GeoServer tugata olmagan backend operatsiyasi. Ikkalasi bilan to‘g‘ri egasi muvaffaqiyatsiz bo‘lgan yo‘lni tuzata oladi. Faqat birinchisi bilan tabiiy tuzatish ma’lumotlar bazasini ochiq qilib qo‘yishdir, bu esa chiptani yanada yomonroq muammo yaratib hal qiladi.

Qatlamni, javob kodini, server tomonidagi istisnoni va uni yaratgan konteyner yoki xostni yozib qo‘ying. Bu to‘rt qator, va ular noaniqlikni butunlay olib tashlaydi.

O'xshash maqolalar