首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >端口443是否适用于在nginx后面运行的gRPC?

问端口443是否适用于在nginx后面运行的gRPC?
EN

Stack Overflow用户
提问于 2021-02-11 12:43:17
回答 1查看 243关注 0票数 1

我设置了一个测试环境,将docker,nginx放在grpc服务器之前。下面是我的配置

docker-compose

代码语言:javascript
复制
version: '3.8'
services:
    web:
        build: .
        command: gunicorn --timeout 100 --workers 2 --threads 4 django_root.wsgi:application --bind 0.0.0.0:8000
        volumes:
            - static_volume:/public/django_root/static
        expose: 
            - 8000
        env_file: 
            - ./.env.dev
    grpc:
        build: .
        command: python manage.py grpcrunserver 0.0.0.0:50051
        env_file: 
            - ./.env.dev
    nginx:
        build:
          context: ./nginx
          dockerfile: Dockerfile-secure
        volumes:
            - static_volume:/public/django_root/static
        ports:
            - 1337:80
            - 443:50052
        depends_on: 
            - web
            - grpc
volumes: 
    static_volume:

Dockerfile-安全

代码语言:javascript
复制
FROM nginx:1.19.0-alpine

RUN rm /etc/nginx/conf.d/default.conf
COPY nginx-secure.conf /etc/nginx/conf.d

nginx-secure.conf

代码语言:javascript
复制
upstream django_root {
    server web:8000;
}

server {

    listen 80;

    location / {
        proxy_pass http://django_root;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /static/ {
        alias /public/django_root/static/;
    }

}

log_format compression '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_referer" "$http_user_agent" "$gzip_ratio"';

server {
    listen 50052 ssl http2;

    ssl_certificate /etc/nginx/server.crt;
    ssl_certificate_key /etc/nginx/server.key;

    access_log /var/log/nginx/a.log;
    error_log /var/log/nginx/e.log;

    location / {
        grpc_pass grpc://grpc:50051;
    }
}

我遇到的问题是端口443不能像我上面在docker-compose文件中设置的那样工作,但是如果我用8443替换它,那么我的客户端可以与grpc服务器通信。我可以从我的客户端看到的端口443用例错误如下

代码语言:javascript
复制
E0211 15:08:05.178000000 22572 src/core/tsi/ssl_transport_security.cc:1439] Handshake failed with fatal error SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED.

我在localhost上对这个测试环境使用了自签名证书,这会是问题所在吗?在nginx站点和docker站点中,我没有看到443在这种情况下被禁止。在这方面需要帮助,如果443在这种情况下是不允许的,请让我参考文档。

EN

回答 1

Stack Overflow用户

发布于 2021-02-16 10:39:07

原来是证书本身。将自签名证书替换为let加密证书并部署到aws可以使端口443正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66148871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档