【发布时间】:2020-06-09 16:50:11
【问题描述】:
我有一个 nginx 网络服务器正在运行,并且有一个 golang api 作为后端。
目前我的 web 应用程序在 braurl.se 上运行。
您可以在http://braurl.se:8080/获取数据
您可以在https://braurl.se查看前端
我在从后端获取数据时遇到问题,而且我的端口配置似乎搞砸了
我不想公开 8080 端口,而是希望能够使用 braurl.se/api/ 获取数据
我认为我做错的是下面显示的任何文件中的端口和代理密码
这是我的文件,谁能指出我在哪里以及我做错了什么:
Nginx 配置文件:
server {
listen 80;
listen [::]:80;
server_name braurl.se www.braurl.se;
location / {
# This redirs to either www.braurl.se or braurl.se but with https.
rewrite ^ https://$host$request_uri? permanent;
}
#for certbot challenges (renewal process)
location ~ /.well-known/acme-challenge {
allow all;
root /data/letsencrypt;
}
location /api/ {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_pass http://goservice:8080;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
}
#https://braurl.se
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name braurl.se;
server_tokens off;
ssl_certificate /etc/letsencrypt/live/braurl.se/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/braurl.se/privkey.pem;
ssl_buffer_size 8k;
ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
ssl_ecdh_curve secp384r1;
ssl_session_tickets off;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
root /usr/share/nginx/html;
index index.html;
# Always try index files, this is for React.
location / {
try_files $uri /index.html;
}
location /api/ {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_pass http://goservice:8080;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
}
Docker 编写文件
version: '3.1'
services:
goservice:
build: "."
image: golang
container_name: goservice
expose:
- "80"
ports:
- "8080:8080"
production-nginx-container:
container_name: 'production-nginx-container'
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./production.conf:/etc/nginx/conf.d/default.conf
- ./production-site:/usr/share/nginx/html
- ./dh-param/dhparam-2048.pem:/etc/ssl/certs/dhparam-2048.pem
- /docker-volumes/etc/letsencrypt/live/braurl.se/fullchain.pem:/etc/letsencrypt/live/braurl.se/fullchain.pem
- /docker-volumes/etc/letsencrypt/live/braurl.se/privkey.pem:/etc/letsencrypt/live/braurl.se/privkey.pem
depends_on:
- "goservice"
Dockerfile (golang):
FROM golang:1.12.7-alpine3.10 AS build
# Support CGO and SSL
RUN apk --no-cache add gcc g++ make
RUN apk add git
WORKDIR /go/src/app
COPY . .
RUN go get github.com/gorilla/mux
RUN GOOS=linux go build -ldflags="-s -w" -o ./bin/test ./main.go
FROM alpine:3.10
RUN apk --no-cache add ca-certificates
WORKDIR /usr/bin
COPY --from=build /go/src/app/bin /go/bin
EXPOSE 8080
ENTRYPOINT /go/bin/test --port 8080
【问题讨论】:
标签: docker go nginx docker-compose