QGIS læser enhver sti, som dets dataproducenter kan nå, så en VPN, der er oppe, er kun halvdelen af opsætningen. Tunnelen giver skrivebordet en rute og en navneopløsningspolitik; projektet mangler stadig tjenestens endpoint, udbyderens protokol og de legitimationsoplysninger, som tjenesten accepterer. Det er tre separate felter, og at skrive VPN’ens offentlige lytter ind i et databasefelt er ingen af dem. Denne gennemgang følger ét PostGIS-lag fra QGIS-formularen til en returneret række og navngiver den grænse, hvert trin beviser.

Start med laget, ikke med VPN’en

Hver lagtype når en forskellig slags endpoint. Et PostGIS-lag åbner en PostgreSQL-forbindelse med vært, port, database og rolle. Et WMS- eller WFS-lag henter en tjeneste-URL og parser derefter et kapabilitetsdokument. En shapefile på et netværksdrev kræver blot en filsti, som styresystemet kan åbne. Fordi det er tre forskellige mekanismer, fortæller et tomt projekt dig intet, før du ved, hvilken du fejlfinder.

Spørg GIS-operatøren om endpointet, porten, den krævede identitet og den adgangspolitik, der gælder for din konto. Hold tjenestens værtsnavn præcis som udstedt, når udrulningen afhænger af privat DNS eller af navnekontrol i certifikatet. Genbrug af en værtadresse kopieret fra en anden brugers gemte forbindelse er den hurtigste vej til en maskine, der svarer, men har en ældre database.

Ruter, tilladte ressourcer og navneopløsning tilhører den, der driver VPN’en. En datakildeformular kan ikke installere en rute, som tunnelprofilen aldrig har sendt, og den kan ikke udvide en gatewaypolitik. Når værten opløses, og porten svarer, er problemets netværksside afsluttet.

Indtast det private endpoint, operatøren har udstedt

PostgreSQL-formularen i QGIS afspejler de felter, libpq forventer, så udfyld den i samme rækkefølge, som en kommandolinjeforbindelse ville. Tjeneste og vært tager databasemaskinen, port tager den lytter, serveren faktisk åbner, og database tager det konkrete katalog i stedet for serverens standard. Gem adgangskoden i en godkendelseskonfiguration i stedet for i projektfilen, så et delt projekt ikke bærer en adgangskode.

Adskil de to navne, før du skriver noget. Gatewaynavnet hører i VPN-klienten, og databasenavnet hører i QGIS, og de er sjældent den samme vært.

VPN gateway:   vpn.gis.lab.example       (profile only, not a data source)
Database host: db.gis.lab.example:5432   (PostGIS service)
Database name: gis_prod
TLS mode:      verify-full

Hvis databasen ligger på en anden maskine bag gatewayen, skal navnet i formularen være den maskine. Privat DNS gennem tunnelen er det, der får navnet til at virke, og et projekt, der kun opløses, mens du er forbundet, opfører sig korrekt i stedet for at cache dårligt.

Hold databasens TLS-tilstand adskilt fra tunnelen

SSL i et VPN-produktnavn beskriver tunnelen, ikke databasesessionen. QGIS sender PostgreSQL SSL-tilstanden videre til libpq, og den tilstand styrer, om klienten verificerer serverens certifikat, og om den kontrollerer værtsnavnet i det. verify-fullgør begge dele, og derfor er det den tilstand, der er værd at beholde, når certifikatet bærer tjenestenavnet.

At sænke tilstanden til disable fordi tunnelen allerede er krypteret fjerner kontrollen af, at den server, du nåede, er den server, du bad om. Når verifikationen fejler, er den sædvanlige årsag et navnemismatch eller et manglende rodcertifikat, og begge kan rettes uden at svække forbindelsen. Peg sslrootcert mod den CA, operatøren offentliggør, og hold værtsnavnet i formularen identisk med navnet i certifikatet.

En tunnel med en privat rute og en database med et gyldigt certifikat kan stadig fejle på rollen. Applikationens legitimationsoplysninger er adskilt fra VPN’ens, og en konto, der godkender over for gatewayen, har ingen underforståede rettigheder i PostgreSQL.

Test hver grænse i rækkefølge, og læs den første fejl

Arbejd udefra fra klienten i en fast rækkefølge: navneopløsning, TCP-rækkevidde, TLS, godkendelse og derefter selve forespørgslen. Det første trin, der fejler, er det eneste, der er værd at rapportere, og at springe frem giver fejlmeddelelser fra en grænse, du ikke har nået endnu. Fire kommandoer dækker de første fire trin.

getent hosts db.gis.lab.example
nc -vz db.gis.lab.example 5432
psql "host=db.gis.lab.example port=5432 dbname=gis_prod sslmode=verify-full" -c 'select 1'
curl -sS 'https://wms.gis.lab.example/ows?service=WMS&request=GetCapabilities' | head -c 200

Et tomt svar fra getent er et opløsningsproblem, ikke et databaseproblem. En afvist eller udløbet nc betyder, at en rute eller en firewallregel mangler, hvilket er en rettelse på gatewaysiden. En TLS-fejl fra psql betyder, at certifikatet eller navnet er forkert, mens password authentication failed betyder, at du nåede PostgreSQL, og problemet er legitimationsoplysningerne. For et WMS-lag returnerer curl kaldet det kapabilitets-XML, som QGIS ville parse, så en HTML-loginside i det output forklarer straks et tomt lag.

En PostgreSQL-fejl er godt nyt sammenlignet med en timeout. Den beviser, at destinationen svarede, hvilket flytter sagen fra netværksteamet til database- eller GIS-administratoren. At bevare den skelnen i rapporten sparer en tur.

Når projektet åbner med tomme lag

Kontroller lagets gemte kilde i QGIS, før du indtaster noget igen. Lagegenskaberne viser den nøjagtige forbindelsesstreng, projektet gemte, og en dubletforbindelse med en ældre vært er en almindelig rest fra et tidligere kontornetværk. Genindlæsning af projektet efter en rettelse af en forbindelse læser ikke altid udbyderen igen, så fjern laget, og tilføj det igen fra den rettede forbindelse.

Bekræft derefter, at godkendelseskonfigurationen er den, der er knyttet til laget, ikke blot en, der findes på listen. Et lag, der er gemt med en anden godkendelseskonfiguration, fejler lydløst i browserpanelet, mens den separate psql test består.

Når laget indlæses, gem projektet med relative stier kun til filer, og hold tjenesteforbindelser navngivet efter deres endpoint. Den næste person, der arver projektet, kan så se, hvilken vært et brudt lag forventede, uden at åbne en sag.

Relaterede artikler