go get 通过nginx代理访问http失败问题

本文介绍了在Go中遇到的问题,即通过go get尝试拉取仅支持HTTP的私有库时,由于nginx代理返回404状态码导致拉取失败。解决方案是配置nginx以正确重定向到HTTP,并使用Let's Encrypt为库添加HTTPS支持。通过调整nginx配置,可以确保go get能够顺利访问私有库。
摘要由CSDN通过智能技术生成

环境

  • go verion 1.19
  • go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GONOPROXY=example.com/*
set GONOSUMDB=example.com/*
set GOOS=windows
set GOPRIVATE=example.com/*
set GOPROXY=https://goproxy.cn,direct
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOVCS=
set GOVERSION=go1.19
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config

背景知识

go ge默认首先使用https,当https请求返回的response为nil则使用http源码),这里不做response返回的状态码判断。

问题描述

go get拉取私有库,代码库使用nginx代理了80443端口,但库只支持http访问。

当使用go get时,首先访问https://example.com/test?go-get=1,因为库不支持https访问,但又因为有nginx做代理,response返回的状态码是404,而response本身不是nil,而是nginx的404页面,因此无法进行后续访问http://example.com/test?go-get=1的流程,导致get失败。

解决方案

使用Let‘s Encrypt,为库访问添加https支持

nginx conf 文件如下

server {
    server_name example.com;

    location ^~ /.well-known/acme-challenge/ {
        alias /etc/nginx/conf.d/example/challenges/;
        try_files $uri =404;
    }

    location / {
        return       301 https://$server_name$request_uri;
    }
}

server {
    listen 443 ssl;

    server_name  example.com;

    ssl_certificate     /etc/nginx/conf.d/example/ssl/chained.pem;
    ssl_certificate_key /etc/nginx/conf.d/example/ssl/domain.key;

    charset utf-8;

    location / {
        proxy_set_header  Host $host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_pass http://xxxxxxxx:xxxx/;
        client_max_body_size 4096m;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值