AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1070739
Accepted
DevOpsSauce
DevOpsSauce
Asked: 2021-07-27 18:48:12 +0800 CST2021-07-27 18:48:12 +0800 CST 2021-07-27 18:48:12 +0800 CST

通过 CNAME 和 Nginx Docker 容器将安全域重定向到另一个域

  • 772

更新:我在这篇文章的底部附加了第二次尝试。它正在“工作”,但我想让我最初的想法发挥作用。

我正在尝试通过重定向服务器将域的 https 请求重定向到另一个域。

我将使用https://website.com,https://website2.com和https://myredirectserver.com作为示例。

我购买了一个 SSL 证书website.com,它的 DNS 是 CNAMEDwww到的myredirectserver.com。也有一个 SSL 证书mywebsite2.com,它目前位于服务器上。一切都很好作为一个独立的域。

myredirectserver.com有两个指向两个 IP 地址的流量管理 A 记录(高可用性)。

这两个 IP 地址在防火墙中通过 NAT 转换为代理服务器。

在该代理服务器上,有一个运行 Alpine/Nginx 的 Docker 容器。

容器的 Dockerfile:

FROM nginx:1.17.7-alpine    
RUN apk add --no-cache tzdata    
ENV TZ America/Chicago    
RUN rm /etc/nginx/conf.d/default.conf    
COPY myredirectserver.com.conf /etc/nginx/conf.d/myredirectserver.com.conf
RUN rm /etc/nginx/nginx.conf    
COPY nginx.conf /etc/nginx/nginx.conf    
COPY myredirectserver.com.crt /etc/nginx/ssl/myredirectserver.com.crt    
COPY myredirectserver.com.key /etc/nginx/ssl/myredirectserver.com.key    
COPY proxy_params /etc/nginx/proxy_params

启动它的docker run部分(通过后端代码安装了用于动态配置文件创建的卷):

docker run --name=myredirectserver --restart always --log-opt max-size=50m --log-opt max-file=5 -d -v /etc/nginx/myredirectserverBuild:/etc/nginx/myredirectserverBuild -v /etc/nginx/myredirectserverSSL:/etc/nginx/myredirectserverSSL -p 8224:443 -p 8223:80 myredirectserver

在该 Docker 容器中,Nginx 配置文件位于/etc/nginx/conf.d/myredirectserver.com.conf:

 #I DO NOT KNOW IF THIS IS CORRECT FOR WHAT I NEED
    server {
                listen 443 ssl;
    
                server_name myredirectserver.com www.myredirectserver.com;
                ssl_certificate /etc/nginx/ssl/myredirectserver.com.crt;
                ssl_certificate_key /etc/nginx/ssl/myredirectserver.com.key;
            }
            server {
                listen 80;
                server_name myredirectserver.com www.myredirectserver.com;
                return 301 https://www.myredirectserver.com$request_uri;
            }
    
    include /etc/nginx/myredirectserverBuild/*.conf;

最后的包含文件包含原始请求的域,mywebsite.com.conf:

 ## www.mywebsite.com virtual host
        server {
            listen 443 ssl;

            server_name mywebsite.com www.mywebsite.com;
            ssl_certificate /etc/nginx/myredirectwebsiteSSL/mywebsite.com.crt;
            ssl_certificate_key /etc/nginx/myredirectwebsiteSSL/mywebsite.com.key;               
        }
        server {
            listen 80;
            server_name mywebsite.com www.mywebsite.com;
            return 301 https://www.mywebsite2.com$request_uri; <--- The redirect
        }
        

该website2.com域位于主机服务器上,我可以正常请求该域。我只是无法弄清楚我哪里出错了。我觉得它在我的 Nginx 配置中,但我的 Nginx 语法并不是最好的。为什么我return 301不工作并将我重定向到域?

故障排除期间的几点注意事项:

wget 0.0.0.0:8223返回:

  --2021-07-26 23:44:19--  http://0.0.0.0:8223/
Connecting to 0.0.0.0:8223... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.mywebsite2.com/ [following]
--2021-07-25 23:44:19--  https://www.mywebsite2.com/
Resolving www.mywebsite2.com (www.mywebsite2.com)... XX.XXX.XXX.XXX
Connecting to www.mywebsite2.com (www.mywebsite2.com)|XX.XXX.XXX.XXX|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html                                               [ <=>                                                                                                                  ]  37.56K   231KB/s    in 0.2s    

2021-07-25 23:44:20 (231 KB/s) - ‘index.html’ saved [38461]

curl --resolve www.myredirectserver.com:8223:0.0.0.0 http://www.myredirectserver.com/返回超时,浏览器也是如此。

在本地网络上,在地址栏 ( 192.168.69.140:8223) 中输入 Docker 容器的 IP 会将我带到https://www.website2.com.

输入https://192.168.69.140:8224会将我带到安全飞溅警告页面。单击proceed,它给了我一个404.

我不知所措,因为当请求到达 CNAME 的 IP 时,我不知道如何处理它myredirectserver.com。如何告诉 Nginx 查看原始请求的域website.com?

更新(第二次尝试):

我停止了 Docker 容器,并将DNSCNAME中的www级别更改为指向一个已经存在的高可用 IP。我会打电话destinationserver.net的。所以基本上:

`mywebsite.com`
|
|---> CNAME 'destinationserver.net'

`destinationserver.net`
|
|----> A XX.XXX.XXX.XXX --> Firewall --> Proxy

|----> A XX.XXX.XXX.XXX --> Firewall --> Proxy

在destinationserver.net服务器上,我在 Nginx 配置中有以下内容website.com:

# ## www.mywebsite.com virtual host
        server {
            listen 8222 ssl;

            server_name mywebsite.com www.mywebsite.com;
            ssl_certificate /etc/nginx/ssl/mywebsite.com.crt;
            ssl_certificate_key /etc/nginx/ssl/mywebsite.com.key;
            return 301 http://www.mywebsite2.com$request_uri;
        }
        server {
            listen 8221;
            server_name mywebsite.com www.mywebsite.com;
            return 301 https://www.mywebsite2$request_uri;
        } 

正如我在问题第一行的“更新”中所述,这是“有效的”,但在单独的空间中处理这些重定向会很好,因此是 Docker 容器的想法。

proxy redirect cname-record nginx docker
  • 1 1 个回答
  • 736 Views

1 个回答

  • Voted
  1. Best Answer
    DevOpsSauce
    2021-08-10T08:35:10+08:002021-08-10T08:35:10+08:00

    我已经放弃了重定向服务器的想法,而是做了两件事:

    我向根域添加了一个 ANAME(别名),因此www请求将转到与非请求相同的高可用流量管理器位置www。然后,在Nginx配置中,我添加了以下内容来重定向请求:

    # ## www.mywebsite.com virtual host
            server {
                listen 8222 ssl;
    
                server_name mywebsite.com www.mywebsite.com;
                ssl_certificate /etc/nginx/ssl/mywebsite.com.crt;
                ssl_certificate_key /etc/nginx/ssl/mywebsite.com.key;
                return 301 https://www.mywebsite2.com$request_uri;
            }
            server {
                listen 8221;
                server_name mywebsite.com www.mywebsite.com;
                return 301 https://www.mywebsite2$request_uri;
            } 
    

    这适用于我需要它做的事情,所以除非有人提出更好的方法,否则我会保持原样。

    • 0

相关问题

  • 持续监控许多服务器运行状况的简单方法?

  • Web 代理脚本与 http 代理的效率?

  • 为将笔记本电脑带回家的用户模拟公司代理

  • 什么是 Microsoft 代理客户端(MSP 客户端)

  • 使用大量 javascript 的页面上的鱿鱼速度很慢

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve