标签: https

根据 URL 有条件 https 重定向到 http?(阿帕奇)

现在,如果有人这样做,我 100% 会重定向https://mysite.com

<VirtualHost *:443>
   ServerAdmin webmaster@mysite.com
   ServerName mysite.com
   ServerAlias www.mysite.com

   RewriteEngine on
   RewriteRule (.*) http://%{HTTP_HOST} [L,R=permanent]
<VirtualHost>
Run Code Online (Sandbox Code Playgroud)

但是,现在我想有条件地重定向。如果用户访问https://mysite.com/abc/,那么我想使用 https;否则重定向。

我该怎么做呢?我尝试阅读文档,但找不到我需要的内容。

我在 Ubuntu Linux 上使用 Apache。

ssl https redirect apache-2.2

3
推荐指数
1
解决办法
1万
查看次数

$_SERVER 中的 HTTPS 变量使用 nginx 作为反向代理

我使用 nginx 作为带有 mod_php 的 apache 前面的反向代理。我的网站位于 https 上,需要将变量 $_SERVER['HTTPS'] 设置为“on”才能正确组装一些链接。我的网站位于 drupal 上,因此在决定网站是否在 https 下运行时,无法修复代码并检查其他变量。

有没有办法只通过调整 nginx 或 apache 配置来解决这个问题?

我发现其他人问类似的问题,但我没有找到适合我的解决方案,也没有明确声明我想要的东西是不可能的。

(例如:HTTPS 服务器/php 变量不可用Nginx:在 HTTP 上剥离标头,在 HTTPS 上添加标头

nginx https reverse-proxy drupal apache-2.2

3
推荐指数
1
解决办法
5009
查看次数

如何在 Google Container Engine 附带的默认 Google Load Balancer 上启用 HSTS?

我很想用我的 GKE 集群设置 HSTS,因为现在 HTTP 请求在设置后返回一个谷歌损坏的机器人 404 页面ingress.yml annotationskubernetes.io/ingress.allow-http: "false"

显然在ingress.yml(即hsts-max-agehsts-include-subdomains)中有这个选项,但据我所知 GKE 不支持它:https : //github.com/kubernetes/ingress/blob/7c749ede0a2d88f289279d61d04005e22f002104/docs/annotations-related.md

我真的很想避免使用和维护自定义 Nginx 负载均衡器并避免失去 Google 的扩展能力,坚持使用默认的负载均衡器将是一个强烈的要求。我还想避免让 HTTP 请求通过并处理我的应用程序中的重定向和 HSTS 标头。

如果 HSTS 不可能,我可以接受一个很好的重定向设置。

非常感谢!

https load-balancing kubernetes google-kubernetes-engine hsts

3
推荐指数
1
解决办法
3073
查看次数

阻止 HTTP 下载但不阻止 HTTPS

为什么网络管理员会阻止通过 HTTP 下载,但允许通过 HTTPS 下载,是否有任何安全原因?

security http https

3
推荐指数
1
解决办法
1289
查看次数

如何防止 nginx 在 AWS 上从 HTTPS 重定向到 HTTP?

我在 AWS ELB 负载均衡器后面有一个由 nginx 服务的网站。负载均衡器上仅启用了 HTTPS。

请求单个文件或带有斜杠的目录可以正常工作。但是,请求没有尾部斜杠的目录不起作用。

原因是,当我请求没有尾部斜杠的目录时,nginx 会重定向到带有尾部斜杠的路径(没关系),但它也会从 HTTPS 更改为 HTTP。负载平衡器配置为仅允许 HTTPS,因此不起作用(超时)。

在 nginx 日志文件上,我可以看到请求到达了 nginx,并且是 nginx 响应 301 永久重定向(因此它不是例如负载平衡器设置的问题)。

10.100.10.15 - - [24/Nov/2017:15:41:08 +0000] "GET /admin HTTP/1.1" 301 178 "-" "Wget/1.18 (darwin16.0.0)"
Run Code Online (Sandbox Code Playgroud)

当我通过curl我看到重定向请求 URL 时:

$ curl -v https://example.com/admin
*   Trying 1.2.3.4...
* TCP_NODELAY set
* Connected to example.com (1.2.3.4) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: example.com
* Server certificate: Amazon
* Server certificate: Amazon …
Run Code Online (Sandbox Code Playgroud)

nginx https amazon-elb

3
推荐指数
1
解决办法
3882
查看次数

Nginx 嵌入式变量 - 如何获取请求中使用的域名?

一台服务器使用多个域名时,如何获取请求中当前使用的域名?我在它的配置文件中使用了 Nginx 的嵌入变量。

我已经设置了 OpenSSL 并且有一个可以很好地用于我的第一个域的重定向,因为正如你所看到的,我在我的配置文件的底部明确地重定向到它。因此,任何其他域上的 HTTP 请求都会重定向到第一个域以进行安全连接。是否有我可以使用的嵌入变量$request_uri,例如类似于,但只返回客户端使用的给定域名?

这是我运行重定向的服务器块。

server {
        listen 80;
        listen [::]:80;
        server_name example.com example1.com example2.com example3.com;
        location / {
                return 301 https://example.com$request_uri;
        }
}
Run Code Online (Sandbox Code Playgroud)

我的其余配置:https : //pastebin.com/HgnZ0aBe

ubuntu http nginx https openssl

3
推荐指数
1
解决办法
7389
查看次数

nginx certbot 证书 www 和非 www

我还没有真正了解如何使用 certbot 为 nginx 创建(工作)证书。

我的网站启用现在看起来像这样:

首先,使用 SSL 阻止 www 域。所有 SSL 的东西都是由 certbot 创建的。

server {
root …
index … 
server_name www.doman.com
listen 443 ssl;
ssl_certificate …
ssl_certificate_key …
include …
ssl_dhparam … 
}
Run Code Online (Sandbox Code Playgroud)

在此之后,为 www 和非 www 从端口 80 重定向到端口 443。第一部分——if 语句——是由 certbot 创建的,而不是我。

server {
if ($host = www.example.com {
    return 301 https://$host$request_uri;
    }

listen *:80;
server_name domain.com www.example.com;
return 301 https://www.example.com$request_uri;
Run Code Online (Sandbox Code Playgroud)

}

最后,一个没有 www 的 443 块。我希望这重定向到 www。

server {
listen 443;
server_name www.domain.com
return 301 …
Run Code Online (Sandbox Code Playgroud)

ssl nginx https lets-encrypt certbot

3
推荐指数
1
解决办法
2428
查看次数

Nginx 和 https - 指定 IP 地址作为 server_name 会给出正确的网站,但证书错误

我想运行此网址: https: //192.168.1.254并在地址栏中获取具有正确内容和证书的网站。我正在访问该网站,但地址栏中出现无效证书错误,因为证书是从不同的服务器块获取的:默认服务器块000-default.conf

有人可以向我解释这种行为吗?

我的客户端浏览器是 Google Chrome 版本 87.0.4280.88(官方版本)(64 位)

我的 Nginx 服务器是:

root@OpenWrt:/etc/nginx/conf.d# nginx -V
nginx version: nginx/1.19.4 (x86_64-pc-linux-gnu)
built with OpenSSL 1.1.1h  22 Sep 2020
TLS SNI support enabled
Run Code Online (Sandbox Code Playgroud)

我认为这个问题与 SNI 显然不允许将文字 IPv4 和 IPv6 地址作为“主机名”有关。但事实真的是这样吗?

我有一个默认服务器块000-default.conf,如下所示:

server {
    server_name _;
    listen 80 default_server;
    listen 443 ssl default_server;

    ## To also support IPv6, uncomment this block
    # listen [::]:80 default_server;
    # listen [::]:443 ssl default_server;

    ssl_certificate '/etc/nginx/conf.d/_lan.crt';
    ssl_certificate_key '/etc/nginx/conf.d/_lan.key';
    return 404; …
Run Code Online (Sandbox Code Playgroud)

ssl nginx https sni

3
推荐指数
1
解决办法
6894
查看次数

将 Web 服务器迁移到新数据中心和新 IP

我有一个托管 200 多个域的 Web 服务器,但需要将其移动到另一个数据中心并获取新的 IP 地址。但是由于所有 DNS 设置都必须手动更新,所以我考虑是否可以在旧 IP 地址上设置某种透明代理,将所有 http/https 流量转发到新 IP。因此访问者不会发现迁移到 DNS 正在被纠正。

我的第一个想法是为此使用 nginx,但认为它会导致域上的 SSL 证书出现问题。有没有解决问题的好方法?

http proxy https transparent-proxy

3
推荐指数
1
解决办法
380
查看次数

有哪些选项可用于保护半专用网络内的数据传输?

更具体地说,我计划建立一个负载均衡的电子商务网站。两个负载均衡器将接受来自管的 https 连接,然后根据 ssl 的性质,它们需要验证连接,解密它,然后将未加密的请求转发到应用程序服务器上。

在一个安全的专用网络中,一切都很好,但是我想用虚拟机(slicehost)运行这个设置。从理论上讲,这些机器应该位于专用网络上,但是另一个人的机器(切片)可以以某种方式窥探网络内的流量是可行的。我需要假设网络不安全。

所以。我考虑过使用 ssh,有人建议我使用 VPN(我之前没有设置过,也不太了解)。如果我使用 ssh,我将需要持续监控连接并确保其正常运行。

我想我想知道其他人是怎么做的?

越简单越好(即,可能出错和需要监控的事情越少)

这是一个 linux 设置。我正在考虑使用磅作为负载平衡器。还需要在这方面做一些测试。也开始阅读 nginx 了。

ssl ssh https load-balancing

2
推荐指数
1
解决办法
324
查看次数