首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向两台服务器请求,然后用nginx返回响应?

如何向两台服务器请求,然后用nginx返回响应?
EN

Stack Overflow用户
提问于 2019-11-30 18:25:44
回答 1查看 35关注 0票数 1

我正在创建一个网站,它发送一个请求到另一个服务器,然后解析它,并返回响应。我使用python中的requests库来发送请求。我发送请求的代码如下:

代码语言:javascript
复制
external_server_url = 'https://external_server.com/'
response = self.requests_session.get(external_server_url,
                                     headers={'user-agent': self._get_device_user_agent(),
                                              'cache-control': 'max-age=0',
                                              'sec-fetch-user': '?1',
                                              'upgrade-insecure-requests': '1'})
return response.text

架构是这样的:

但是requests库太慢了。我将nginx重定向与requests进行了比较,nginx重定向的速度要快得多。重定向的nginx代码如下:

代码语言:javascript
复制
server {
    listen 8888 ssl;
    rewrite ^/(.*)$ https://external_server.com/ redirect;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

我想使用新的架构,nginx将请求发送到外部服务器,并将其提供给Django服务器。新的架构是这样的:

如何使用nginx服务器创建此体系结构?

EN

回答 1

Stack Overflow用户

发布于 2019-12-07 00:57:22

这里的罪魁祸首不是“请求”库,而是远程服务器,它没有关闭连接。还有一种可能是,response包含一些不符合标准的头文件,“请求”库不能正确地处理它们,也不能关闭自身的连接。

您可以将http协议从"1.1“降级为"1.0”(使用可禁用http保活功能),也可以在您的请求连接:close中添加header,从而要求远程服务器在服务请求后关闭连接(有效地禁用了保活功能)。

代码语言:javascript
复制
external_server_url = 'https://external_server.com/'
response = self.requests_session.get(
  external_server_url,
  headers={
    'Connection': 'close',
    'user-agent': self._get_device_user_agent(),
    'cache-control': 'max-age=0',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1'
  }
)
return response.text
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59115221

复制
相关文章

相似问题

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