RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 699971
Accepted
Nepster
Nepster
Asked:2020-07-31 17:44:36 +0000 UTC2020-07-31 17:44:36 +0000 UTC 2020-07-31 17:44:36 +0000 UTC

如何使用 https 正确代理?

  • 772

有一台服务器,上面有nginx作为服务器。有一个docker在这台服务器上运行,并保持应用程序在内网,例如:http: //192.167.117.1 :8080 。

任务是使用 https 从主 nginx 代理到内部网络。

我这样解决了问题:

server {
    server_name  www.example.com;
    rewrite ^(.*) https://example.com$1 permanent;
}

server {
    server_name  www.example.com;
    rewrite ^(.*) https://example.com$1 permanent;
}

server {
       listen         80;
       server_name    example.com;
       return         301 https://$server_name$request_uri;
}

server {

    server_name *.example.com example.com;

    listen   443;

    ssl    on;
    ssl_certificate    /var/www/example.com/ssl/ssl-bundle.crt;
    ssl_certificate_key    /var/www/example.com/ssl/example.com.key;

    # side note: only use TLS since SSLv2 and SSLv3 have had recent vulnerabilities
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    # 301 редирект со страниц со слешем на страницы без слеша в конце URL
    rewrite ^/(.*)/$ /$1 permanent;

    charset utf-8;
    client_max_body_size 128M;

    gzip  on;

    # Минимальная длина ответа, при которой модуль будет жать, в байтах
    gzip_min_length  1000;

    # Разрешить сжатие для всех проксированных запросов
    gzip_proxied     any;

    # MIME-типы которые необходимо жать
    gzip_disable "msie6";

    # Compress all output labeled with one of the following MIME-types.
    gzip_types
      application/atom+xml
      application/javascript
      application/json
      application/rss+xml
      application/vnd.ms-fontobject
      application/x-font-ttf
      application/x-web-app-manifest+json
      application/xhtml+xml
      application/xml
      font/opentype
      image/svg+xml
      image/x-icon
      text/xml
      text/css
      text/plain
      text/javascript
      text/x-component;

    # Запрещает сжатие ответа методом gzip для IE6  (старый вариант gzip_di$
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    # Уровень gzip-компрессии
    gzip_comp_level  6;


    location / {
        proxy_pass       http://192.167.117.1:8080;
        proxy_set_header Host 192.167.117.1:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_buffering off;
        break;
    }

    location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|txt|rtf|css|js)$ {
        expires max;
        add_header Pragma public;
       #add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        proxy_pass http://192.167.117.1:8080;
    }

}

但是,docker 中的应用程序不理解它是通过 https 工作的,你能告诉我如何配置吗?

php
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    sanmai
    2020-07-31T18:25:34Z2020-07-31T18:25:34Z

    不是关于nginx,而是关于应用程序,需要说明的是它是在代理后面。您不能仅通过更改 nginx 配置来解决此问题。

    也许应用程序本身需要为此完成。更改设置可能就足够了。例如,phpMyAdmin 有一个PmaAbsoluteUri指定绝对路径的选项,在这个路径中,在开头写上带有 https 的 URL 就足以让一切正常工作。

    如果您的应用程序运行在 Apache 下,那么只需两行即可解决问题。虚拟主机的 Apache 配置中的一个:

    SetEnvIf Scheme https HTTPS=on
    

    在 nginx 配置中有一个:

    proxy_set_header  Scheme $scheme;
    
    • 1
  2. Nepster
    2020-07-31T19:01:18Z2020-07-31T19:01:18Z

    总的来说,我在应用程序级别找出问题并将尝试描述解决方案。

    该应用程序是在 docker 上运行的 laravel 站点。运行在 https 上的主 nginx 服务器代理所有请求到运行在 http 上的 docker 的 nginx。因此,当我们进入应用程序本身时,它认为它可以在 http 上运行。

    我们有几种选择来解决这个问题:

    1. 也可以通过 https 在 docker 上启动应用程序
    2. 发送一个特殊的 通过 nginx 标头
    3. 通过应用程序设置 https。

    碰巧前两个选项不适合我,因为切换环境时会有额外的困难(以及从没有 https 的本地位置进行测试)。

    因此,一切都是通过应用程序大致按照以下方式决定的:

    AppServiceProvider.php

    ...
            if (env('APP_ENV') === 'production') {
                URL::forceScheme('https');
                $this->app->make(Request::class)->server->set('HTTPS', true);
            }
    ...
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5