Apache way to explore https:https://cdn.v2ex.com/navatar/76dc/611d/128_normal.png?m=1348528357 https:https://cdn.v2ex.com/navatar/76dc/611d/128_large.png?m=1348528357 2024-10-06T17:55:20Z Copyright © 2010-2018, V2EX 请教下 Apache2 代理二级域名的问题 tag:www.v2ex.com,2024-10-06:/t/1077927 2024-10-06T11:44:33Z 2024-10-06T17:55:20Z CamelName member/CamelName 主机上有两个 web 服务,分别占用 4000 端口和 3000 端口,基于域名+端口可成功访问

希望实现子域名访问对应端口,如下:

sub1.domain.com -- ip:3000

sub2.domain.com -- ip:4000

添加域名解析

在域名解析供应商处完成如下配置

20241006-1910-Fig-1

Apache2 反向代理配置

参考以下步骤,在服务器上完成 apache2 反向代理配置子

在 Apache 中,你可以使用mod_proxy模块来设置反向代理,从而隐藏后端服务的真实端口号。通过这种方式,用户访问子域名时就像访问普通的 HTTP 或 HTTPS 网站一样,而不会看到后端服务运行的具体端口。

以下是基于 Apache 完成反代配置的步骤:

  1. 确保安装了 Apache 和必要的模块: 确保你的 Apache 服务器已经安装了mod_proxymod_proxy_http等模块。如果没有安装,可以通过以下命令安装(以 Debian/Ubuntu 系统为例):

    sudo a2enmod proxy sudo a2enmod proxy_http 

    安装完成后需要重启 Apache 服务:

    sudo systemctl restart apache2 
  2. 配置虚拟主机: 在 Apache 的配置文件目录下(通常是/etc/apache2/sites-available/),创建一个新的虚拟主机配置文件,或者编辑现有的配置文件。假设你想要为子域名service.example.com配置反向代理,并且该子域名将指向本地机器上运行的一个服务,例如运行在 3000 端口上的 Web 应用。

  3. 添加反向代理配置: 编辑配置文件并添加如下内容:

    <VirtualHost *:80> ServerName service.example.com # 可选:重定向所有请求到 HTTPS Redirect permanent / https://service.example.com/ </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName service.example.com # SSL 证书配置 SSLEngine on SSLCertificateFile /path/to/certificate.crt SSLCertificateKeyFile /path/to/private.key # 如果有中间证书 SSLCertificateChainFile /path/to/chain.pem # 开启日志记录 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # 反向代理配置 ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ </VirtualHost> </IfModule> 

    这个配置做了几件事:

  4. 启用站点并重启 Apache: 保存更改后的配置文件,然后启用这个站点配置:

    sudo a2ensite your-config-file.conf sudo systemctl reload apache2 
  5. 测试配置: 使用浏览器或其他工具(如 curl )访问http://service.example.com,应该会被自动重定向到https://service.example.com,并且最终可以看到运行在 8080 端口上的服务内容。

问题

完成配置后,访问http://sub1.example.com ,无法访问,提示 502

请教

  1. 上述配置方法可能是哪里出错了?请有实操经验的大佬指导下

  2. 除了上面这个方法,有没有其他方法?(已尝试宝塔面板)

]]> Apache 错误:(20014)Internal error tag:www.v2ex.com,2024-06-30:/t/1053728 2024-06-30T09:31:36Z 2024-06-10T11:28:36Z tianmao member/tianmao 使用 Apache 反代 DuckDuckGo,如何处理 external-content.duckduckgo.com?反代 Google 时遇到 recaptcha 验证码又怎么解决? tag:www.v2ex.com,2023-01-03:/t/906207 2023-01-03T03:13:37Z 2023-01-03T03:11:37Z yucho member/yucho 我想要用 Apache 反代 DuckDuckGo ,主页和搜索页面都没问题,但是搜索页面的域名为 external-content.duckduckgo.com 的图片无法加载。尝试使用 Substitute 指令替换,却没有效果。 我的部分配置文件内容:

ProxyVia On SSLProxyEngine On RequestHeader set Front-End-Https "On" # 必须设置,否则无法全局替换 RequestHeader set Accept-Encoding "" #禁用同源策略,否则 DuckDuckGo 资源无法加载 Header unset Content-Security-Policy # 反代地址 ProxyPass "/" "https://duckduckgo.com/" ProxyPassReverse "/" "https://duckduckgo.com/" ProxyPassReverseCookieDomain "duckduckgo.com" "ddg.example.com" AddOutputFilterByType SUBSTITUTE text/html text/css text/Javascript application/Javascript # 在其他的状态码页面也进行替换 SetEnv filter-errordocs # 替换规则 Substitute "s|external-content.duckduckgo.com|ddgec.example.com|ni" Substitute "s|duckduckgo.com|ddg.example.com|ni" 

反代 Google 时也遇到了 recaptcha 验证码,无法正常使用。 求大佬帮助。

]]>
大佬们, apache 服务器配置虚拟主机,配置禁止所有非法域名时。 tag:www.v2ex.com,2022-03-16:/t/840709 2022-03-16T03:32:25Z 2022-03-16T03:30:25Z wzx155 member/wzx155
#禁止所有非法域名 

<VirtualHost *:80> 

ServerName 服务器 ip 

ServerAlias * 

<Location /> 

Order Allow,Deny 

Deny from all 

</Location>

</VirtualHost>。

apache 是安装在内部服务器上,有一个服务器 ip ,然后把服务器映射到外网 ip 上提供外网使用。在这个配置项中, “ServerName 服务器 ip” 中的服务器 ip 是填内网 ip 还是外网 ip ]]>
flink 如何提高字符串解析性能 tag:www.v2ex.com,2021-09-06:/t/800144 2021-09-06T05:32:30Z 2021-09-06T05:31:30Z nelsonken member/nelsonken flink 任务解析超大 json 成为瓶颈

]]>
有没有哪位熟悉 apache httpd,有个离谱的事情问一下 tag:www.v2ex.com,2021-06-06:/t/781707 2021-06-06T08:16:50Z 2021-06-06T08:16:50Z zhoudaiyu member/zhoudaiyu 我们公司用 7 台 apache 作为后端反向代理,最近发生了奇怪的事,这 7 个 apache 的某台运行一段时间网卡的入口流量就会突然降低,连接数降低,客户端监控报警有请求超时,重启 apache 后即可恢复(故障在 7 台上都发生过,但是同一时刻只有一台挂)。观察了一下故障发生时候的情况,出问题的时 apache 监听的端口全连接队列打满,Recv-Q 129 Send-Q 128 。

这几台 apache 平时运行过程中总是有子进程不断退出并创建出新的子进程( 10 秒左右就会发生),在即将创建出子进程的时候,全连接队列会积压( Recv-Q 大概能到 40 )。用 perf trace 追踪了一下某个子进程的系统调用,发现退出码都是 0,看上去是正常退出的?

系统日志 /var/log/message 和 dmesg 以及 apache 日志都没有异常,这个现象是今年 4 月发生的,但是发生故障前后我们并没有变更过 apache 的配置,进程模型用的 event 。所以有点疑惑,大家有啥思路吗?

]]>
部署个 apache/doris 怎么就这么复杂 tag:www.v2ex.com,2020-12-31:/t/740543 2020-12-31T02:58:06Z 2021-04-17T13:39:37Z leeraya member/leeraya https://www.bookstack.cn/read/Doris/0.md 就不能提供个单机版,一键启动吗,搞了一天了都。

]]>
httpd 和其它 web server 的通信方式有哪些? tag:www.v2ex.com,2020-11-05:/t/722066 2020-11-05T07:46:38Z 2020-11-05T08:45:38Z howandsen member/howandsen
目前是用 http 通信。

ProxyPass "http://127.0.0.1:8080"

我的问题是,httpd 支持别的通信方式么?

比如像 uWSGI 那样支持 unix socket ]]>
使用 docker 安装 h5ai 后,直接访问文本文件乱码 tag:www.v2ex.com,2020-06-29:/t/685677 2020-06-29T09:12:20Z 2021-01-10T15:55:26Z Vimax member/Vimax docker 镜像使用的是下面这个:

docker run -t -p 80:80 -d -v /home:/h5ai --name h5ai ilemonrain/h5ai:full 

部署完毕后,通过 h5ai 浏览目录,链接,预览中文都是没有问题。但是直接通过链接+文件名(raw)直接访问时,文本类型文件(txt,md)等有中文内容都会显示乱码.

# README 这是一个文档共享平台。 

查看了下应用服务器是 apache

Apache/2.4.33 (Unix) Server at xxx.xxx.xxx.xxx Port 80 

去网上搜索了多个文本浏览中文乱码的方案,都失败了。

vim /etc/httpd/conf/httpd.conf 

...

修改保存后,重启 docker 容器,浏览文本 raw,还是乱码。

]]>
关于 htaccess Redirect 301 问题,怎么去掉参数 tag:www.v2ex.com,2020-01-08:/t/636304 2020-01-08T14:48:44Z 2020-01-08T14:46:44Z hbolive member/hbolive Redirect 301 /1.html /test/
结果访问 /1.html 时,最后的 URL 地址是:/test/?/1.html
虽然最终页面没问题,但这个参数跟在后面很不爽,请问怎么去掉?
apache2.4/windows
以前也写过类似的重定向,没有这个问题。。 ]]>
反向代理配置 ip 可以访问,域名不行 tag:www.v2ex.com,2019-12-30:/t/633443 2019-12-30T01:36:45Z 2019-12-30T01:35:45Z harryperlau member/harryperlau 用 Apache 做反向代理配置,配置文件如下:

 ProxyPass /webapp/ balancer://webapp-proxy/ ProxyPassReverse /webapp/ balancer://webapp-proxy/ <Proxy balancer://webapp-proxy> BalancerMember http://10.61.16.28:8523/webapp/ </Proxy> ProxyPassMatch ^(/qa(/\w+)+) balancer://qa-proxy/ ProxyPassReverse ^(/qa(/\w+)+) balancer://qa-proxy/ <Proxy balancer://qa-proxy> BalancerMember http://10.61.16.27:8522/ </Proxy> ProxyPassMatch ^(/qa-client(/\w+)*.*) balancer://qa-client-proxy/ ProxyPassReverse ^(/qa-client(/\w+)*.*) balancer://qa-client-proxy/ <Proxy balancer://qa-client-proxy> BalancerMember http://10.61.16.28:8524/ </Proxy> ProxyPassMatch ^(/wx(/\w+)*.*) balancer://qa-wx-proxy/ ProxyPassReverse ^(/wx(/\w+)*.*) balancer://qa-wx-proxy/ <Proxy balancer://qa-wx-proxy> BalancerMember http://10.61.16.28:8525/ </Proxy> 

为什么 ip 访问时正常,用域名访问时就会提示重定向次数过多。对了,Apache 配置文件里还有 webgate 单点登录拦截。

]]>
「分布式系统前沿技术」专题 | Pulsar 的设计哲学 tag:www.v2ex.com,2019-12-27:/t/632978 2019-12-27T11:03:51Z 2019-12-26T23:02:51Z PingCAP member/PingCAP

分布式技术的发展,深刻地改变了我们编程的模式和思考软件的模式。值 2019 岁末,PingCAP 联合 InfoQ 共同策划出品“分布式系统前沿技术 ”专题, 邀请众多技术团队共同参与,一起探索这个古老领域的新生机。本文出自 StreamNative 联合创始人 Sijie Guo。

几十年前,消息队列开始兴起,它用于连接大型机和服务器应用程序,并逐渐在企业的服务总线与事件总线设计模式、应用间的路由和数据迁移中发挥至关重要的作用。自此,应用程序架构和数据角色经历了重大变化:例如,面向服务的架构、流处理、微服务、容器化、云服务和边缘计算,这些只是诸多变化中的冰山一角。这些变化创造了大量的新需求,这些新需求远远超出了原有消息队列的技术能力。

为了满足这些需求,处理消息队列的全新方法应运而生。现代应用对消息解决方案的要求不仅仅是主动连接、移动数据,而是要在持续增长的服务和应用中智能处理、分析和传输数据,并且在规模持续扩大的情况下不增加运营负担。

为了满足上述要求,新一代的消息传递和数据处理解决方案 Apache Pulsar 应运而生。Apache Pulsar 起初作为消息整合平台在 Yahoo 内部开发、部署,为 Yahoo Finance、Yahoo Mail 和 Flickr 等雅虎内部关键应用连接数据。2016 年 Yahoo 把 Pulsar 开源并捐给 Apache 软件基金会( ASF ),2018 年 9 月 Pulsar 毕业成为 ASF 的顶级项目,逐渐从单一的消息系统演化成集消息、存储和函数式轻量化计算的流数据平台。

Pulsar 的设计是为了方便和现有的 Kafka 部署集成,同时也方便开发人员将其连接到应用程序。Pulsar 最初就是为连接 Kafka 构建的。Pulsar 提供和 Kafka 兼容的 API,无需更改代码,只要使用 Pulsar 客户端库重新编译,现有应用程序即可连接到 Kafka。Pulsar 还提供内置的 Kafka 连接器,可以消费 Kafka topic 的数据或将数据发布到 Kafka topic。

系统架构是软件最底层的设计决策,一旦实施,就很难改变。架构决定了软件特性和根本不同。Apache Pulsar 在功能上有很多优势,例如统一的消费模型,多租户,高可用性等等,但最本质、最重要的区别还是 Apache Pulsar 的系统架构。Apache Pulsar 的设计架构与其他消息传递解决方案(包括 Apache Kafka )的架构有着本质不同,Pulsar 从设计时就采用了分层分片式的架构,以提供更好的性能、可扩展性和灵活性。

现实生活中,存在的消息系统有很多,Yahoo 为什么研发自己的消息系统呢?因为已有的消息系统无法解决 Yahoo 遇到的问题和规模,Yahoo 需要多租户,能够支撑上百万的 topics,同时满足低延迟、持久化和跨地域复制要求。而现有的消息系统,存在如下诸多问题:

于是,我们决定开始研发 Pulsar 来解决消息队列的扩展性问题。解决扩展性问题的核心思路是数据分片,Pulsar 从设计时就采用了分层分片式的架构,以提供更好的性能、可扩展性和灵活性。

下面我们从技术角度来详细解析 Apache Pulsar 的架构。

Pulsar 的分层架构

从数据库到消息系统,大多数分布式系统采用了数据处理和数据存储共存于同一节点的方法。这种设计减少了网络上的数据传输,可以提供更简单的基础架构和性能优势,但其在系统可扩展性和高可用性上会大打折扣。

Pulsar 架构中数据服务和数据存储是单独的两层:数据服务层由无状态的 “Broker” 节点组成,而数据存储层则由 “Bookie” 节点组成。

<center>图 1 传统单体架构 vs. Pulsar 存储计算分层架构</center>

这种存储和计算分离的架构给 Pulsar 带来了很多优势。首先,在 Pulsar 这种分层架构中,服务层和存储层都能够独立扩展,可以提供灵活的弹性扩容。特别是在弹性环境(例如云和容器)中能够自动扩容缩容,并动态适应流量的峰值。并且,Pulsar 这种分层架构显著降低了集群扩展和升级的复杂性,提高了系统可用性和可管理性。此外,这种设计对容器是非常友好的,这使 得 Pulsar 也成为了流原生平台的理想选择。

Pulsar 系统架构的优势也包括 Pulsar 分片存储数据的方式。Pulsar 将主题分区按照更小的分片粒度来存储,然后将这些分片均匀打散分布在存储层的 “bookie” 节点上。这种以分片为中心的数据存储方式,将主题分区作为一个逻辑概念,分为多个较小的分片,并均匀分布和存储在存储层中。这种架构设计为 Pulsar 带来了更好的性能,更灵活的扩展性和更高的可用性。

Pulsar 架构中的每层都可以单独设置大小,进行扩展和配置。根据其在不同服务中的作用不同,可灵活配置集群。对于需要长时间保留的用户数据,无需重新配置 broker,只要调整存储层的大小。如果要增加处理资源,不用重新强制配置存储层,只需扩展处理层。此外,可根据每层的需求优化硬件或容器配置选择,根据存储优化存储节点,根据内存优化服务节点,根据计算资源优化处理节点。

<center>图 2 Apache Pulsar 系统架构</center>

而大多数消息队列技术(包括 Apache Kafka )都采用单体架构,其消息处理和消息持久化(如果提供了的话)都在集群内的同一个节点上。这种体系结构在大多数传统的数据库平台以及 Hadoop 等大数据系统中也较为常见,与昂贵的外部存储阵列的常见替代方案相比,其设计目的在于将数据的计算与存储放到同一台机器上来处理,以减少网络流量和访问延迟,同时降低存储成本。这种方法在小型环境中很容易部署,但在性能、可伸缩性和灵活性方面存在明显问题。随着固态磁盘的广泛使用,网络带宽的迅速提升以及存储延迟的显著降低,已经没有必要采用单体架构进行这种权衡处理了。

接下来,我们结合数据处理中各种不同的 IO 访问模式来深入了解 Pulsar 系统架构的优势。

IO 访问模式的优势

流系统中通常有三种 IO 访问模式:

  1. 写( Writes ):将新数据写入系统中;

  2. 追尾读( Tailing Reads ):读取最近写入的数据;

  3. 追赶读( Catch-up Reads ):读取历史的数据。例如当一个新消费者想要从较早的时间点开始访问数据,或者当旧消费者长时间离线后又恢复时。

和大多数其他消息系统不同,Pulsar 中这些 IO 访问模式中的每一种都与其他模式隔离。在同样 IO 访问模式下,我们来对比下 Pulsar 和其他传统消息系统(存储和服务绑定在单个节点上,如 Apache Kafka )的不同。

传统消息系统(图 3 左侧图)中,每个 Broker 只能利用本地磁盘提供的存储容量,这会给系统带来一些限制:

  1. Broker 可以存储和服务的数据量受限于单个节点的存储容量。因此,一旦 Broker 节点的存储容量耗尽,它就不能再提供写请求,除非在写入前先清除现有的部分数据。

  2. 对于单个分区,如果需要在多个节点中存储多个备份,容量最小的节点将决定分区的最终大小。

<center>图 3 传统单体架构 vs. Pulsar 存储计算分层架构</center>

相比之下,在 Apache Pulsar (图 3 右侧图)中,数据服务和数据存储是分离的,Pulsar 服务层的任意 Broker 都可以访问存储层的所有存储节点,并利用所有节点的整体存储容量。在服务层,从系统可用性的角度来看,这也有着深远的影响,只要任一个 Pulsar 的 Broker 还在运行,用户就可以通过这个 Broker 读取先前存储在集群中的任何数据,并且还能够继续写入数据。

下面我们来详细看一下在每种 IO 访问模式下的架构优势。

在传统消息系统架构中,一个分区的所有权会分配给 Leader Broker。对于写请求,该 Leader Broker 接受写入并将数据复制到其他 Broker。如图 4 左侧所示,数据首先写入 Leader Broker 并复制给其他 followers。数据的一次持久化写入的过程需要两次网络往返。

在 Pulsar 系统架构中,数据服务由无状态 Broker 完成,而数据存储在持久存储中。数据会发送给服务该分区的 Broker,该 Broker 并行写入数据到存储层的多个节点中。一旦存储层成功写入数据并确认写入,Broker 会将数据缓存在本地内存中以提供追尾读( Tailing Reads )。

<center>图 4 Writes 访问模式对比</center>

如图 4 所示,和传统的系统架构相比,Pulsar 的系统架构并不会在写入的 IO 路径上引入额外的网络往返或带宽开销。而存储和服务的分离则会显著提高系统的灵活性和可用性。

追尾读

对于读取最近写入的数据场景,在传统消息系统架构中,消费者从 Leader Broker 的本地存储中读取数据;在 Pulsar 的分层架中,消费者从 Broker 就可以读取数据,由于 Broker 已经将数据缓存在内存中,并不需要去访问存储层。

<center>图 5 Tailing Read 访问模式对比</center>

这两种架构只需要一次网络往返就可以读取到数据。由于 Pulsar 在系统中自己管理缓存中的数据,没有依赖文件系统缓存,这样 Tailing Reads 很容易在缓存中命中,而无需从磁盘读取。传统的系统架构一般依赖于文件系统的缓存,读写操作不仅会相互竞争资源(包括内存),还会与代理上发生的其他处理任务竞争。因此,在传统的单片架构中实现缓存并扩展非常困难。追赶读

追赶读(Catch-up Reads)非常有趣。传统的系统架构对 Tailing reads 和 Catch-up reads 两种访问模式进行了同样的处理。即使一份数据存在多个 Broker 中,所有的 Catch-up reads 仍然只能发送给 Leader Broker。

Pulsar 的分层架构中历史(旧)数据存储在存储层中。Catch-up 读可以通过存储层并行读取数据,而不会与 Write 和 Tailing Reads 两种 IO 模式竞争或干扰。

三种 IO 模式放在一起看

最有趣的是当你把这些不同的模式放在一起时,也就是实际发生的情况。这也正是单体架构的局限性最令人痛苦的地方。传统的消息系统架构中,所有不同的工作负载都被发送到一个中心( Leader Broker )位置,几乎不可能在工作负载之间提供任何隔离。

然而,Pulsar 的分层架构可以很容易地隔离这些 IO 模式:服务层的内存缓存为 Tailing Reads 这种消费者提供最新的数据;而存储层则为历史处理和数据分析型的消费者提供数据读取服务。

<center>图 6 三种 IO 模式对比</center>

这种 IO 隔离是 Pulsar 和传统消息系统的根本差异之一,也是 Pulsar 可用于替换多个孤立系统的关键原因之一。Apache Pulsar 的存储架构读、写分离,能保证性能的一致性,不会引起数据发布和数据消费间的资源竞争。已发布数据的写入传递到存储层进行处理,而当前数据直接从 broker 内存缓存中读取,旧数据直接从存储层读取。

超越传统消息系统

上面讨论了 Pulsar 的分层架构如何为不同类型的工作负载提供高性能和可扩展性。Pulsar 分层架构带来的好处远远不止这些。我举几个例子。

无限的流存储

并行访问流式计算中的最新数据和批量计算中的历史数据,是业界一个普遍的需求。

由于 Pulsar 基于分片的架构,Pulsar 的一个主题在理论上可以达到无限大小。当容量不足时,用户只需要添加容器或存储节点即可轻松扩展存储层,而无需重新平衡数据;新添加的存储节点会被立即用于新的分片或者分片副本的存储。

Pulsar 将无界的数据看作是分片的流,分片分散存储在分层存储( tiered storage )、BookKeeper 集群和 Broker 节点上,而对外提供一个统一的、无界数据的视图。其次,不需要用户显式迁移数据,减少存储成本并保持近似无限的存储。因此,Pulsar 不仅可以存储当前数据,还可以存储完整的历史数据。

<center>图 7 无限的流存储</center>

数据查询和数据分析

Pulsar 有能力存储数据流的完整历史记录,因此用户可以在其数据上使用各种数据工具。Pulsar 使用 Pulsar SQL 查询历史消息,使用 Presto 引擎高效查询 BookKeeper 中的数据。Presto 是用于大数据解决方案的高性能分布式 SQL 查询引擎,可以在单个查询中查询多个数据源的数据。Pulsar SQL 允许 Presto SQL 引擎直接访问存储层中的数据,从而实现交互式 SQL 查询数据,而不会干扰 Pulsar 的其他工作负载。Pulsar 与 Presto 的集成就是一个很好的例子,如下是使用 Pulsar SQL 查询的示例。

<center>图 8 Presto 与 Apache Pulsar 的集成</center>

Pulsar 的周边生态

批处理是对有界的数据进行处理,通常数据以文件的形式存储在 HDFS 等分布式文件系统中。流处理将数据看作是源源不断的流,流处理系统以发布 /订阅方式消费流数据。当前的大数据处理框架,例如 Spark、Flink 在 API 层和执行层正在逐步融合批、流作业的提交与执行,而 Pulsar 由于可以存储无限的流数据,是极佳的统一数据存储平台。Pulsar 还可以与其他数据处理引擎(例如 Apache Spark 或 Apache Flink )进行类似集成,作为批流一体的数据存储平台,这进一步扩展了 Pulsar 消息系统之外的角色。下图展示了 Pulsar 的周边生态。

<center>图 9 Apache Pulsar 周边生态</center>

总结

Apache Pulsar 是云原生的分布式消息流系统,采用了计算和存储分层的架构和以 Segment 为中心的分片存储,因此 Apache Pulsar 具有更好的性能、可扩展性和灵活性,是一款可以无限扩展的分布式消息队列。

Apache Pulsar 是一个年轻的开源项目,拥有非常多吸引人的特性。Pulsar 社区的发展迅猛,在不同的应用场景下不断有新的案例落地。期待大家能和 Apache Pulsar 社区深入合作,一起进一步完善、优化 Pulsar 的特性和功能。

作者介绍:Sijie Guo,StreamNative 联合创始人,Apache BookKeeper 和 Apache Pulsar PMC 成员和 Committer。之前是 Twitter 消息组的技术负责人,与他人共同创建了 Apache DistributedLog。加入 Twitter 之前,他曾在 Yahoo !从事推送通知基础架构工作。

本文是「分布式系统前沿技术」专题文章,目前该专题在持续更新中,欢迎大家保持关注👇

]]>
有在 macOS 配置 Apache 服务器的吗? tag:www.v2ex.com,2019-12-07:/t/626783 2019-12-07T06:00:25Z 2019-12-07T05:59:25Z islujw member/islujw macOS 自带了 Apache。

基础功能配置如虚拟主机配置成功了,但 SSL 配置一直没有成功过,更高级的配置也不敢乱动。Apache 的官方文档也没有针对 macOS 的指南。有专业的资料供参考吗?

]]>
大佬们求教: HttpClients.createDefault() tag:www.v2ex.com,2019-08-26:/t/595361 2019-08-26T14:37:45Z 2019-08-26T14:34:45Z lianta member/lianta 使用 HttpClients.createDefault() 莫名进入到 FutureTask。并被捕获到 Throwable。 求解!!!

]]>
LApache 虚拟主机设置.htaccess 实现全站 HTTPS tag:www.v2ex.com,2019-07-26:/t/586565 2019-07-26T12:45:15Z 2019-07-26T12:45:53Z iamverylovely member/iamverylovely Apache 虚拟主机实现 301 HTTPS WWW

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:From-Https} !^on$ [NC,OR] #如果某些页面没有 301,上一句改为:RewriteCond %{HTTPS} !^on$ [NC,OR] RewriteCond %{HTTP_HOST} ^iamverylovely.com$ [NC] RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R=301,L] </IfModule> 

结果是: http://iamverylovely.com http://www.iamverylovely.com https://iamverylovely.com

全部跳转至: https://www.iamverylovely.com

记录一下。

备注:使用命令:curl -I 加上 URL,可以快速查看 Header。

]]>
Apache2 如何配置 SSL 证书啊 tag:www.v2ex.com,2019-06-23:/t/576725 2019-06-23T14:51:28Z 2019-06-23T14:56:00Z 45gfg9 member/45gfg9 最近在搞个人网站,想实现通过 https 访问,打算设在树莓派上 但是出现了问题... Safari 访问时报错“此连接非私人连接”,“此网站可能在冒充‘ 45gfg9-rpi3.local ’来窃取您的个人或财务信息。您应回到之前的页面。”,查看证书“‘ c14.45gfg9.net ’证书名称与输入不匹配”

SSL 证书是申请的腾讯云免费证书

配置文件 default-ssl.conf https://paste.ubuntu.com/p/M33F5jVmzZ/ 已软链到 /etc/apache2/sites-enabled 各项什么 mods 也都软链到 /etc/apache2/mods-enable 了

配置跟着 https://cloud.tencent.com/document/product/400/35243#step6 走的

新人小透明请求帮助...

]]>
请教乐于助人、高手如云的 V2 朋友们! tag:www.v2ex.com,2019-06-18:/t/574972 2019-06-18T02:07:40Z 2019-06-18T04:17:27Z sxx member/sxx 非常喜欢 V2 这个大家庭,但本人水平有限,特向乐于助人、高手如云的 V2 朋友们请教个问题: 我有个小网站,也没什么流量,为防止所在的 linux 的 VPS 主机的被攻击,我安装了 mod_evasive,在配置文件中,我网上教程增加的 DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP" 这个语句,总是不执行(不生效),导致测试时进行 DDOS 攻击的 IP 无法添加在防火墙中,以便屏蔽这个 IP。但我在单独指令状态下执行 sudo iptables -A INPUT -s 55.55.55.55 -j DROP 这样的命令是有效的。我在百度和 google 里搜索了一整天,也做了无数实验,还是没解决,所以请教各位朋友和大佬,请在忙之中,能否指点一下我,多谢多谢!

]]>
一个服务器分别运行 Apache2 子域名网站和 Nginx 主域名网站,子域名为何出现 400 Bad Request? tag:www.v2ex.com,2019-05-15:/t/564404 2019-05-15T08:10:51Z 2019-05-15T11:55:33Z elsagong member/elsagong 下午好,咨询大家关于Apache2的问题,我在服务器上同时运行了 Nginx ( 80 端口绑定的主域名),和 Apache2 ( 8080 端口绑定了子域名),可以通过localhost:8080访问Apache2的网站,但是访问子域名sub.domain.com或者sub.domain.com:8080时,会出现 Nginx 80 端口的400 Bad Request错误,可是我子域名明明绑定的是 Apache2 的 8080 端口啊😂

有通过netstat -tlpn查看端口情况, 确定 tcp6 是 apache2 的 8080 端口,tcp 是 nginx 的 80 端口,有执行lsof -i TCP:8080 -s TCP:LISTEN, 需要重启的服务都重启过.....

求助,感谢

]]>
个推基于 Apache Pulsar 的优先级队列方案 tag:www.v2ex.com,2019-04-15:/t/555199 2019-04-15T02:25:07Z 2019-04-15T02:22:07Z getui member/getui 作者:个推平台研发工程师 祥子

一、业务背景

在个推的推送场景中,消息队列在整个系统中占有非常重要的位置。 当 APP 有推送需求的时候, 会向个推发送一条推送命令,接到推送需求后,我们会把 APP 要求推送消息的用户放入下发队列中,进行消息下发;当同时有多个 APP 进行消息下发时,难免会出现资源竞争的情况, 因此就产生了优先级队列的需求,在下发资源固定的情况下, 高优先级的用户需要有更多的下发资源。

二、基于 Kafka 的优先级队列方案

针对以上场景,个推基于 Kafka 设计了第一版的优先级队列方案。Kafka 是 LinkedIn 开发的一个高性能、分布式消息系统; Kafka 在个推有非常广泛的应用,如日志收集、在线和离线消息分发等。

架构 在该方案中,个推将优先级统一设定为高、中、低三个级别。具体操作方案如下:

  1. 对某个优先级根据 task (单次推送任务)维度,存入不同的 Topic,一个 task 只写入一个 Topic,一个 Topic 可存多个 task ;

  2. 消费模块根据优先级配额(如 6:3:1),获取不同优先级的消息数,同一优先级轮询获取消息;这样既保证了高优先级用户可以更快地发送消息,又避免了低优先级用户出现没有下发的情况。

Kafka 方案遇到的问题

随着个推业务的不断发展,接入的 APP 数量逐渐增多,第一版的优先级方案也逐渐暴露出一些问题:

  1. 当相同优先级的 APP 在同一时刻推送任务越来越多时,后面进入的 task 消息会因为前面 task 消息还存在队列情况而出现延迟。如下图所示, 当 task1 消息量过大时,在 task1 消费结束前,taskN 将一直处于等待状态。
  2. Kafka 在 Topic 数量由 64 增长到 256 时,吞吐量下降严重,Kafka 的每个 Topic、每个分区都会对应一个物理文件。当 Topic 数量增加时,消息分散的落盘策略会导致磁盘 IO 竞争激烈,因此我们不能仅通过增加 Topic 数量来缓解第一点中的问题。

基于上述问题,个推进行了新一轮的技术选型, 我们需要可以创建大量的 Topic, 同时吞吐性能不能比 Kafka 逊色。经过一段时间的调研,Apache Pulsar 引起了我们的关注。

三、为什么是 Pulsar

Apache Pulsar 是一个企业级的分布式消息系统,最初由 Yahoo 开发,在 2016 年开源,并于 2018 年 9 月毕业成为 Apache 基金会的顶级项目。Pulsar 已经在 Yahoo 的生产环境使用了三年多,主要服务于 Mail、Finance、Sports、Flickr、the Gemini Ads platform、Sherpa (Yahoo 的 KV 存储)。

架构

Topic 数量 Pulsar 可以支持百万级别 Topic 数量的扩展,同时还能一直保持良好的性能。Topic 的伸缩性取决于它的内部组织和存储方式。Pulsar 的数据保存在 bookie (BookKeeper 服务器)上,处于写状态的不同 Topic 的消息,在内存中排序,最终聚合保存到大文件中,在 Bookie 中需要更少的文件句柄。另一方面 Bookie 的 IO 更少依赖于文件系统的 Pagecache,Pulsar 也因此能够支持大量的主题。

消费模型 Pulsar 支持三种消费模型:Exclusive、Shared 和 Failover。 Exclusive (独享):一个 Topic 只能被一个消费者消费。Pulsar 默认使用这种模式。

Shared(共享):共享模式,多个消费者可以连接到同一个 Topic,消息依次分发给消费者。当一个消费者宕机或者主动断开连接时,那么分发给这个消费者的未确认(ack)的消息会得到重新调度,分发给其他消费者。

Failover (灾备):一个订阅同时只有一个消费者,可以有多个备份消费者。一旦主消费者故障,则备份消费者接管。不会出现同时有两个活跃的消费者。

Exclusive 和 Failover 订阅,仅允许一个消费者来使用和消费每个订阅的 Topic。这两种模式都按 Topic 分区顺序使用消息。它们最适用于需要严格消息顺序的流(Stream)用例。

Shared 允许每个主题分区有多个消费者。同一个订阅中的每个消费者仅接收 Topic 分区的一部分消息。Shared 最适用于不需要保证消息顺序队列(Queue)的使用模式,并且可以按照需要任意扩展消费者的数量。

存储 Pulsar 引入了 Apache BookKeeper 作为存储层,BookKeeper 是一个专门为实时系统优化过的分布式存储系统,具有可扩展、高可用、低延迟等特性。具体介绍,请参考 BookKeeper 官网

Segment BookKeeper 以 Segment (在 BookKeeper 内部被称作 ledger) 作为存储的基本单元。从 Segment 到消息粒度,都会均匀分散到 BookKeeper 的集群中。这种机制保证了数据和服务均匀分散在 BookKeeper 集群中。

Pulsar 和 Kafka 都是基于 partition 的逻辑概念来做 Topic 存储的。最根本的不同是,Kafka 的物理存储是以 partition 为单位的,每个 partition 必须作为一个整体(一个目录)存储在某个 broker 上。 而 Pulsar 的 partition 是以 segment 作为物理存储的单位,每个 partition 会再被打散并均匀分散到多个 bookie 节点中。

这样的直接影响是,Kafka 的 partition 的大小,受制于单台 broker 的存储;而 Pulsar 的 partition 则可以利用整个集群的存储容量。

扩容 当 partition 的容量达到上限后,需要扩容的时候,如果现有的单台机器不能满足,Kafka 可能需要添加新的存储节点,并将 partition 的数据在节点之间搬移达到 rebalance 的状态。

而 Pulsar 只需添加新的 Bookie 存储节点即可。新加入的节点由于剩余空间大,会被优先使用,接收更多的新数据;整个扩容过程不涉及任何已有数据的拷贝和搬移。

Broker 故障 Pulsar 在单个节点失败时也会体现同样的优势。如果 Pulsar 的某个服务节点 broker 失效,由于 broker 是无状态的,其他的 broker 可以很快接管 Topic,不会涉及 Topic 数据的拷贝;如果存储节点 Bookie 失效,在集群后台中,其他的 Bookie 会从多个 Bookie 节点中并发读取数据,并对失效节点的数据自动进行恢复,对前端服务不会造成影响。

Bookie 故障 Apache BookKeeper 中的副本修复是 Segment (甚至是 Entry)级别的多对多快速修复。这种方式只会复制必须的数据,这比重新复制整个主题分区要精细。如下图所示,当错误发生时,Apache BookKeeper 可以从 bookie 3 和 bookie 4 中读取 Segment 4 中的消息,并在 bookie 1 处修复 Segment 4。所有的副本修复都在后台进行,对 Broker 和应用透明。

当某个 Bookie 节点出错时,BookKeeper 会自动添加可用的新 Bookie 来替换失败的 Bookie,出错的 Bookie 中的数据在后台恢复,所有 Broker 的写入不会被打断,而且不会牺牲主题分区的可用性。

四、基于 Pulsar 的优先级队列方案

在设计思路上,Pulsar 方案和 Kafka 方案并没有多大区别。但在新方案中,个推技术团队借助 Pulsar 的特性,解决了 Kafka 方案中存在的问题。

  1. 根据 task 动态生成 Topic,保证了后进入的 task 不会因为其他 task 消息堆积而造成等待情况。
  2. 中高优先级 task 都独享一个 Topic,低优先级 task 共享 n 个 Topic。
  3. 相同优先级内,各个 task 轮询读取消息,配额满后流转至下一个优先级。
  4. 相同优先级内, 各个 task 可动态调整 quota, 在相同机会内,可读取更多消息。
  5. 利用 Shared 模式, 可以动态添加删除 consumer,且不会触发 Rebalance 情况。
  6. 利用 BookKeeper 特性,可以更灵活的添加存储资源。

五、Pulsar 其他实践

  1. 不同 subscription 之间相对独立,如果想要重复消费某个 Topic 的消息,需要使用不同的 subscriptionName 订阅;但是一直增加新的 subscriptionName,backlog 会不断累积。
  2. 如果 Topic 无人订阅,发给它的消息默认会被删除。因此如果 producer 先发送,consumer 后接收,一定要确保 producer 发送之前,Topic 有 subscription 存在(哪怕 subscribe 之后 close 掉),否则这段时间发送的消息会导致无人处理。
  3. 如果既没有人发送消息,又没有人订阅消息,一段时间后 Topic 会自动删除。
  4. Pulsar 的 TTL 等设置,是针对整个 namespace 起效的,无法针对单个 Topic。
  5. Pulsar 的键都建立在 zookeeper 的根目录上,在初始化时建议增加总节点名。
  6. 目前 Pulsar 的 java api 设计,消息默认需要显式确认,这一点跟 Kafka 不一样。
  7. Pulsar dashboard 上的 storage size 和 prometheus 上的 storage size (包含副本大小)概念不一样。
  8. dbStorage_rocksDB_blockCacheSize 设置的足够大;当消息体量大,出现 backlog 大量堆积时, 使用默认大小(256M)会出现读耗时过大情况,导致消费变慢。
  9. 使用多 partition,提高吞吐。
  10. 在系统出现异常时,主动抓取 stats 和 stats-internal,里面有很多有用数据。
  11. 如果业务中会出现单 Topic 体量过大的情况,建议把 backlogQuotaDefaultLimitGB 设置的足够大(默认 10G), 避免因为默认使用producer_request_hold 模式出现 block producer 的情况;当然可以根据实际业务选择合适的 backlogQuotaDefaultRetentionPolicy
  12. 根据实际业务场景主动选择 backlog quota。
  13. prometheus 内如果发现读耗时为空情况,可能是因为直接读取了缓存数据; Pulsar 在读取消息时会先读取 write cache, 然后读取 read cache ;如果都没有命中, 则会在 RocksDB 中读取条目位子后,再从日志文件中读取该条目。
  14. 写入消息时, Pulsar 会同步写入 journal 和 write cache ; write cache 再异步写入日志文件和 RocksDB ; 所以有资源的话,建议 journal 盘使用 SSD。

六、总结

现在, 个推针对优先级中间件的改造方案已经在部分现网业务中试运行,对于 Pulsar 的稳定性,我们还在持续关注中。 作为一个 2016 年才开源的项目,Pulsar 拥有非常多吸引人的特性,也弥补了其他竞品的短板,例如跨地域复制、多租户、扩展性、读写隔离等。尽管在业内使用尚不广泛, 但从现有的特性来说, Pulsar 表现出了取代 Kafka 的趋势。在使用 Pulsar 过程中,我们也遇到了一些问题, 在此特别感谢翟佳和郭斯杰(两位均为 Stream Native 的核心工程师、开源项目 Apache Pulsar 的 PMC 成员)给我们提供的支持和帮助。

参考文献:

[1] 比拼 Kafka, 大数据分析新秀 Pulsar 到底好在哪( https://www.infoq.cn/article/1UaxFKWUhUKTY1t_5gPq)

[2] 开源实时数据处理系统 Pulsar:一套搞定 Kafka+Flink+DB( https://juejin.im/post/5af414365188256717765441)

]]>
Apache 2.4.38 在编译配置参数上,如何指定 apache 的配置文件安置到/etc 里面? tag:www.v2ex.com,2019-03-09:/t/542915 2019-03-09T15:50:34Z 2019-03-09T17:59:26Z qazwsxkevin member/qazwsxkevin 系统是 Centos 6, 我是处女座,想把 apache 的 conf 放去 /etc 能不能在./configure 的时候就把这个位置指定了? 搜了一些网页资料,都是这个人抄那个人的内容,介绍静态编译和动态编译,似乎没发现有这样的参数? 必须得自己去改 config.layout 内容?这个略麻烦。。。 曾经见过一些系统,貌似是 apache 的 2.2.15 吧,conf 文件是放在 /etc/httpd/conf 里的。。。。

]]>
apache 下如何将 xxx.com www.xxx.com https://xxx.com 重定向 https://www.xxx.com 的 tag:www.v2ex.com,2018-09-08:/t/487327 2018-09-08T03:22:10Z 2018-09-08T06:27:51Z astome member/astome apache 下如何将 http://xxx.comhttp://www.xxx.comhttps://xxx.com 重定向 https://www.xxx.com

]]>
Apache 的 Access Log 中老是出现 OPTIONS 访问,导致数据库连接中断,怎么处理? tag:www.v2ex.com,2018-08-02:/t/476314 2018-08-02T08:21:47Z 2018-08-04T04:26:08Z kevin168 member/kevin168 最近使用阿里云的云服务器搭建了个 Wordpress 网站,然后奇葩的是在每天半夜两三点,都会出现数据库连接中断,网站报错:“ Error establising a database connection ”,查看了下服务器日志,发现中断的时间点里是重复出现 OPTIONS 访问,示例如下:

127.0.0.1 - - [02 /AUG/2018:16:00:05 +0800] "OPTIONS * HTTP/1.0" 200 -

127.0.0.1 - - [02 /AUG/2018:16:00:04 +0800] "OPTIONS * HTTP/1.0" 200 -

127.0.0.1 - - [02 /AUG/2018:16:00:03 +0800] "OPTIONS * HTTP/1.0" 200 -

127.0.0.1 - - [02 /AUG/2018:16:00:02 +0800] "OPTIONS * HTTP/1.0" 200 -

127.0.0.1 - - [02 /AUG/2018:16:00:01 +0800] "OPTIONS * HTTP/1.0" 200 -

之后加大了 MaxSpareServers 的数值(默认为 10,已加到 50 ),还是老样子,有大神遇到类似问题的不?这该如何解决,求指教,万分感谢!

]]>
很灵异的 apache 伪静态规则偶尔会失效 大家遇到过吗?求解决方法 tag:www.v2ex.com,2018-08-02:/t/476215 2018-08-02T03:56:45Z 2018-08-02T06:10:45Z jookr member/jookr 根目录下的.htaccess 内容

<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.php?/$1 [QSA,PT,L] </IfModule> 

/abc/123.php 是真实存在的文件,内容是不接收传参,也没有跳转的,也就是不会收到外部影响。 根据以上规则,此 URL 是不走伪静态的,实际效果也确实如此。 但是会偶尔出现这个 url 打开的是伪静态后响应的内容 也就是 RewriteCond %{REQUEST_FILENAME} !-f 这条规则偶尔会失效,继续匹配到下面 RewriteRule ^(.*)$ /index.php?/$1 [QSA,PT,L] 这条规则上去了

请问有经验的大佬这个问题是由于什么而引发的呢,怎么解决这个问题呢?

]]>
flume 抓 TOMCAT 日志发 kafka,怎么按日志内容分段发送? tag:www.v2ex.com,2018-07-09:/t/469211 2018-07-09T03:26:07Z 2018-07-09T03:23:07Z jhwangpin member/jhwangpin flume 抓 TOMCAT 日志发 kafka,怎么按日志内容分段发送? tomcat 日志里有 exception 这种的,好几行,flume 默认按行作为一个数据流发送,后期分析和查询不方便,怎么样设置产能将 exception 或者多行的日志当做一个流来发送呢

]]>
ubuntu16.04 搭建 wiki 求助 tag:www.v2ex.com,2018-07-03:/t/467741 2018-07-03T03:45:02Z 2018-07-03T06:54:28Z frmongo member/frmongo 1.背景: 小弟菜鸟,想在搬瓦工 VPS ( ubuntu16.04 )上搭建 dokuwiki,但是在搭建环境时遇到问题。

2.安装环境:

搬瓦工 VPS ubuntu16.04 apache 2.4.18 php5.6 3.具体问题 apache2 已经安装完成,浏览器输入 HostIp/ 是可以看到 Apache2 Ubuntu Default Page 的,说明阿帕奇工作了。然后新建这个文件 /var/www/html/test.php 内容为 </?php phpinfo(); /?> (去掉斜杠) 理论上,浏览器打开 HostIp/test.php 可以看到一个带有 php 版本信息的页面(之前我的本地 ubuntu PC 上这样试过时可以的)。 但是实际上,浏览器看到的是 403 - Forbidden。

是否 VPS 有特殊的设置?还是说访问 html 文件夹下的内容需要单独设置什么权限?

]]>
关于 apache 多域名多站点(http 和 https 都有)单服务器配置问题 tag:www.v2ex.com,2018-06-11:/t/462263 2018-06-11T12:08:09Z 2018-06-11T08:08:09Z bankroft member/bankroft 系统版本 Distributor ID: CentOS Description: CentOS Linux release 7.5.1804 (Core) Release: 7.5.1804 Codename: Core

httpd 版本 Server version: Apache/2.4.6 (CentOS) Server built: Apr 20 2018 18:10:38

有没有参考的配置文件,httpd.conf 和 ssl.conf 以及个人站点的配置

万分感谢

]]>
配置好的 CentOS httpd SSL 服务,为什么不能网页不能自动重定向 https? tag:www.v2ex.com,2018-04-28:/t/450734 2018-04-28T09:45:27Z 2018-04-29T07:01:13Z pppguest3962 member/pppguest3962 这个主机完整是 https://192.168.89.41:8080

我想别人在访问 http://192.168.89.41:8080,自动跳往 https://192.168.89.41:8080 但按目前调试的配置,访问 http://192.168.89.41:8080,浏览器会显示出一个 html 的代码明文:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> Reason: You're speaking plain HTTP to an SSL-enabled server port.<br /> Instead use the HTTPS scheme to access this URL, please.<br /> <blockquote>Hint: <a href="https://localhost:8080/"><b>https://localhost:8080/</b></a></blockquote></p> </body></html> 

下面是节选 httpd.conf,配置有多个 VirtualHost,但是只想 8080 这个主机启用 https, mod_ssl 确定是装好的,证书已经使用上的了,

cat /etc/httpd/conf/httpd.conf

#8080,Test <VirtualHost *:8080> SSLEngine on SSLCertificateFile "/etc/httpd/conf/ssl_key/server.crt" SSLCertificateKeyFile "/etc/httpd/conf/ssl_key/server.key" SSLOptions StdEnvVars SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW:!RC4: DocumentRoot /opt/test1 DocumentRoot "/opt/test1" <Directory "/opt/test1"> Options Indexes FollowSymLinks #Options FollowSymLinks #Options Indexes AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> #9090,Test2 <VirtualHost *:9090> DocumentRoot /opt/test2 DocumentRoot "/opt/test2" <Directory "/opt/test2"> Options Indexes FollowSymLinks #Options FollowSymLinks #Options Indexes AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> 

cat /opt/test1/.htaccess

RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L] 
]]>
请教一下在 Lightsail 部署 Python Flask project 时候遇到的问题 tag:www.v2ex.com,2018-04-11:/t/445839 2018-04-11T02:10:15Z 2018-04-15T09:46:40Z mgsparrow member/mgsparrow 大家好!最近在 amazon 的 Lightsail 中开了个 5 刀的服务,打算学习一下服务器的搭建和部署,因为是新手,经验不够丰富,想向大家请教一点 apache 的问题。

首先,我是按照这个教程去配置我的 app,目录结构是一样的,只是目录的名字不一样,这个是教程链接: https://www.digitalocean.com/community/tutorials/how-to-deploy-a-flask-application-on-an-ubuntu-vps
然后,我的 /etc/apache2/sites-available/Item-Catalog.conf 配置请参考此图: https://imgur.com/uaJ9IWm
问题是,当我 sudo a2ensite Item-Catalog.conf,再用 sudo service apache2 reload 后,会提示如下:

Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.

我觉得应该是我的配置写得哪里不对了,可以指点一二吗?万分感谢!

]]>
想问问大神, apache 搭建的反代,套了 CF 之后,被反代的网站出现 ERROR1000,应该如何解决 tag:www.v2ex.com,2018-03-15:/t/438506 2018-03-15T15:46:05Z 2018-03-15T11:46:05Z rocklinsuv member/rocklinsuv 如题,反代某逗比网站(就是教你如何上网的网站),在自己的 VPS 上部署了 apache,最近( 3.12 开始)被一只无形的手干扰 443,导致无法正常建立 HTTPS 连接。套了 Cloudflare 之后,该网站提示 ERROR1000,可能是因为该网站也是套了 Cloudflare。请问该如何配置 apache 使网站能够正常访问?是不是要设一个 host 头什么的,小白请教各位大神,非常感谢~ 还想请问在 apache 板块发这个合不合适呢,第一次发帖,谢谢。

]]>
Apache 可以通过路由配置让一个域名访问两个系统吗? tag:www.v2ex.com,2017-11-21:/t/408385 2017-11-21T13:43:12Z 2017-11-21T15:22:36Z zcdll member/zcdll 我的系统是基于 Laravel 的,PHP 开发的微信 web 网站,用的 easywechat 的包。

然后,现在已经可以使用了。

现在想配置一套 测试环境,想着能不能在同一个域名下,再搭建一套 Laravel 的项目呢?

我今天下午试了一下,现在通过

a.xyz.com ==> laravel_1

b.xyz.com ==> laravel_2

Apache 添加两个虚拟主机,这么访问没有问题,通过两个二级域名,访问两套 Laravel 的项目。

但是由于微信的限制,需要认证,所以只能填写一个二级域名,现在手头也没有多余的认证公众号,所以就想着,能不能在同一个域名下,再搭建一套 Laravel 的环境?

a.xyz.com ==> laravel_1

a.xyz.com/test ==> laravel_2

像上面这样走。

不在 Laravel 里面配置 routes/web.php ,能不能通过 Apache 来转发?

1、先不考虑微信认证的问题,单纯说能不能这么搭建两套系统? 2、考虑微信认证的情况下,还可以行吗?还需要再配置一下微信认证的链接嘛?

谢谢!

]]>
解决了一个 Apache 拒绝服务的问题((OS 64)指定的网络名不再可用。AH00341: winnt_accept: Asynchronous AcceptEx failed.) tag:www.v2ex.com,2017-11-12:/t/405715 2017-11-12T06:34:03Z 2017-11-12T09:31:03Z terence4444 member/terence4444 事件起因

由于上海电信把家庭宽带 443 端口封掉,导致我的微信公众号“游戏打折情报”( yxdzqb )无法从微信服务器直连。于是我用 PHP 写了一个类似反向代理的转发器布署在外服务器上,用途是:把来自 80/443 的微信服务转发给家庭宽带的其它未封端口上。

这里做个广告:微信公众号 游戏打折情报 可以查询 Steam/杉果 /Humble Bundle 的打折 /最低价情况,还有一些免费领取的推送,不会推垃圾信息,可以自行查看推送历史。

故障现象

一般情况下可以正常使用,但过了一段时间以后微信公众号会出现无响应(经判断是拒绝服务),重启 Apache 后即恢复正常。把 log 调到 Debug 模式以后发现如下可疑行:

中文 Windows 系统: [mpm_winnt:warn] (OS 64)指定的网络名不再可用。 AH00341: winnt_accept: Asynchronous AcceptEx failed. 英文 Windows 系统: (OS 64)The specified network name is no longer available. AH00341: winnt_accept: Asynchronous AcceptEx failed. 

解决方法

在 MPM 里调试了很久没找到问题,后来找到了这个讨论: https://communities.ca.com/thread/241692373

解决方法是升级到 Apache 2.4.24 以后的版本,如果执行的是 2.4.23 或以前的版本,也可以在 httpd.conf 中改如下行:

AcceptFilter https connect AcceptFilter http connect 

我看到很多中文网站(都是抄的同一个来源)说:

加入: Win32DisableAcceptEx 或者: AcceptFilter https none AcceptFilter http none 

并不完全正确,Win32DisableAcceptEx 只适用于 Apache 2.2 而 AcceptFilter https none 不用 Filter 会有一些安全风险。

在这里记录一下分享给大家,也以免自己忘了。

]]>
线上正式环境中的 apache 怎么配置 tag:www.v2ex.com,2017-10-24:/t/400214 2017-10-24T05:06:21Z 2017-10-24T05:19:52Z scxiaoxu member/scxiaoxu 请问线上环境中的 apache 怎么配置啊,比如我 a.com 访问默认 www 目录,我想做个二级域名 a.a.com 访问 a 目录,现在二级域名已经解析到服务器了,我 apache 怎么配置啊,求指点

]]>
请教一个 apache 虚拟主机配置的问题 tag:www.v2ex.com,2017-10-24:/t/400118 2017-10-24T01:42:09Z 2017-10-24T02:19:20Z MrMike member/MrMike ServerAdmin demo@example.com
DocumentRoot /mnt/www/example
ServerName demo.example.com
ServerAlias demo.example.com *.demo.example.com
ErrorLog logs/demo-example-error_log
CustomLog logs/demo-example-access_log common
<Directory "/mnt/www/example">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

这是一个项目的域名配置,但是访问 login.demo.example.com 这样三级域名时,全部跳转到了 apche 根目录去了。同样的配置,在另外一个项目里, 只是修改了下二级域名,三级域名跳转都正常。
请教下,还有哪些需要配置? ]]>
apache 2.4.16 + PHP 5.5.29 使用 fcgi 方式跑 wordpress,想用.htaccess 限制 wp-login. PHP 是不是就不管用了? tag:www.v2ex.com,2017-09-21:/t/392581 2017-09-21T08:12:24Z 2017-09-21T09:43:27Z chinaglwo member/chinaglwo apache 2.4.16 + PHP 5.5.29 使用 fcgi 方式跑 wordpress,想用.htaccess 限制 wp-login.php 是不是就不管用了?

httpd.conf 里面的配置是 <VirtualHost :80> DocumentRoot /www/www/ ProxyPassMatch ^/(..php)$ fcgi://127.0.0.1:9000/www/www/$1 DirectoryIndex index.html index.php </virtualhost>

比如在.htaccess 中写入 <Files "wp-login.php"> Require all denied </files>

发现还是可以访问的,是不是因为 php 请求以及被转发到后端 fcgi 进程了? 那要怎么弄呢

]]>
如何利用 Apache rewrite 隐性跳转 tag:www.v2ex.com,2017-09-04:/t/388181 2017-09-04T15:00:55Z 2017-09-04T14:57:55Z zzw1998 member/zzw1998 页面地址是 abc.com/xxx.php ,想让访问 xxx.abc.com 等效于访问 abc.com/xxx.php ,如何才能做到?如果 rewrite 不可以,那么利用 php 该如何写,或者还有没有其他办法

]]>
请教 Apache 伪静态规则的 2 条规则 的请教 tag:www.v2ex.com,2017-08-31:/t/387233 2017-08-31T09:25:44Z 2017-08-31T09:37:56Z xiaoyanbot member/xiaoyanbot 第一条问题:

Options +FollowSymlinks -Multiviews FollowSymlinks 会影响性能吗? 每次都检查 符号链接 Multiviews 啥意思? 

第二条问题:

 RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] 

E=PATH_INFO:$1 这个啥意思?

]]>
apache2.4.10 configured -- resuming normal operations tag:www.v2ex.com,2017-08-10:/t/381875 2017-08-10T03:25:14Z 2017-08-09T03:25:14Z apache2error member/apache2error 安装了用命令安装了 apache2
发现无法通过 ip 访问 apache 安装成功页面
看日志出现
apache2.4.10 configured -- resuming normal operations ]]>
请问如何设置文件夹权限使 vsftpd 和 apache 目录并存 tag:www.v2ex.com,2017-07-06:/t/373561 2017-07-06T11:20:48Z 2017-07-06T12:17:48Z angelsky11 member/angelsky11 在自己的 ubuntu vps 里给朋友开了个 ftp

ftp 根目录设置为 /var/www/username
权限给了 username:www-data

然后在 apache 里新建了站点,站点根目录也设定为 /var/www/username 然后整个目录及下属给了 755 的权限

安装 wordpress,发现没有写入的权限,在站点里无法写入权限,提示需要机器的 ftp 账号和密码

之前自己的站,因为不需要给自己开 ftp 账号,从来都是用 root 连接机器的,所以自己站的目录都给了 www-data:www-data

希望懂行的大佬们指引指引

]]>
深夜请教一个 Apache 的 Rewrite 规则 tag:www.v2ex.com,2017-05-30:/t/364818 2017-05-30T18:22:58Z 2017-05-30T18:19:58Z fengtalk member/fengtalk 访问的还是 domain.com/py?cid=
输入 domain.com/py?cid=1234(任一数字)
访问 example.com/py?cid=1234 任一数字)

折腾了两个半小时以上,各种查资料,无果。特来请教,谢谢! ]]>
Apache 配置 Rewrite 重写规则问题 tag:www.v2ex.com,2017-04-16:/t/355243 2017-04-16T11:21:27Z 2017-04-22T01:34:31Z vipper member/vipper 现有一个需求,希望通过配置 apache 的 rewrite 规则来实现只允许 IE 来访问网站 网上查找资料 RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR] 可以通过这个规则设置来禁止 IE 浏览器访问,这个和需求相反。 其实也想过通过设置很多浏览器的规则来只允许 IE 访问,可是目前市面上有太多的浏览器了,怕禁止不全面,还有就是费时

百度查询了 Rewrite 重写规则,没有发现有有关实现需求的内容,特来 V 站询问各位大牛

]]>
大家好,请问如何查看 Apache 向别的服务器发送了什么 URL 出去呢 tag:www.v2ex.com,2017-04-05:/t/352646 2017-04-05T06:17:21Z 2017-04-07T02:09:24Z toslink member/toslink 是这样的,我纽约的服务器被黑客拿下了,然后留了后门,每次都修改管理员密码的时候都没用,我怀疑是他的后门偷偷把我修改后的密码发送到他的服务器那里去了,但是我不知道是通过 get 的方式还是 post 的方式发送出去的,所以我想问问大家在 Apache 的哪个地方可以看到我的 vps 偷偷外发了哪些东西出去。

]]>
请教一个重写规则问题 tag:www.v2ex.com,2017-03-25:/t/350223 2017-03-25T04:25:35Z 2017-03-25T06:08:50Z hiboshi member/hiboshi RewriteEngine on RewriteCond %{REQUEST_URI} !^(/aaa/bbb)$ [NC] RewriteCond %{SERVER_PORT} =80 [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [NC,L,R=301] RewriteRule !\.(dfk|tsv|pdf|PDF|js|ico|gif|GIF|jpg|JPG|jpeg|JPEG|png|PNG|css|src|csv|txt|TXT|xml|XML|xls|XLS|php|PHP|json|ttf|woff|woff2|svg|swf|eot|htc|lic|mp4)$ index.php [NC,L]

当我使用 80 端口并且 URI 不为 /aaa/bbb 的时候 不跳转 https

这样写怎么直接跳到 https://www.test.com/index.php 上面了?

]]>
求教一个 htaccess 写法 tag:www.v2ex.com,2017-02-28:/t/343777 2017-02-28T04:06:44Z 2017-03-02T17:28:10Z Totato5749 member/Totato5749 想要实现的需求:

  1. http://www.example.com
  2. http://example.com
  3. https://www.example.com
  4. https://example.com 以上四个链接均跳转到 https://example.com ( http 与 https 区别,有无 www 区别)

求大神指点

]]>
Apache rewrite 部分细节 tag:www.v2ex.com,2017-02-15:/t/340664 2017-02-15T07:48:48Z 2017-02-15T03:48:48Z cloudL member/cloudL 多个.htaccess 匹配的优先级

网站根路径下有一个.htaccess ,根目录下的文件夹 test 中也有一个.htaccess ,那么,访问 http://localhost/test/xyz 会有什么结果呢( test 下不存在名为 xyz 的文件),或者说如果两个.htaccess 都会对错误的访问进行处理,谁的优先级更高?

根路径下:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]

RewriteCond %{REQUEST_FILENAME} -l [OR]

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [L]

RewriteRule ^.*$ https://baidu.com [R=301,L]

test 路径下:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]

RewriteCond %{REQUEST_FILENAME} -l [OR]

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [L]

RewriteRule ^.*$ https://bing.com [R=301,L]

测试结果是 test 路径下的.htaccess 起效了,也就是在浏览器上访问 http://localhost/test/xyz 实际上跳转到了 Bing 。当我把 test 下的.htaccess 移除后则会跳转到 Baidu.

罗列一些细节

$N 匹配的是 RewriteRule 中正则匹配的内容(RewriteRule backreferences),而%N 匹配的是 RewriteCond 中正则匹配的内容(RewriteCond backreferences),而\N 则是正则表达式中原生的反向引用 有时候出现的::并不是特殊的符号,只是方便使用的分隔符而已,喜欢的话可以用##等替代 12 RewriteCond TestString CondPattern 中, TestString 可以是以下内容构成的:

RewriteRule backreferences

RewriteCond backreferences

RewriteMap expansions 3

Server-Variables 4

RewriteRule Pattern Substitution [flags]中, pattern 匹配的是什么?就我的理解来说,如果访问的链接是 http://localhost:80/test/hello/hahahaha?x=100 ,

如果它由网站根目录下的.htaccess 来处理,它匹配的内容就是 test/hello/hahahaha; 如果它由根目录 /test/.htaccess 来处理,它匹配的内容就是 hello/hahahaha

What is matched?5 In VirtualHost context, The Pattern will initially be matched against the part of the URL after the hostname and port, and before the query string (e.g. “/app1/index.html ”). In Directory and htaccess context, the Pattern will initially be matched against the filesystem path, after removing the prefix that led the server to the current RewriteRule (e.g. “ app1/index.html ” or “ index.html ” depending on where the directives are defined). If you wish to match against the hostname, port, or query string, use a RewriteCond with the %{HTTP_HOST}, %{SERVER_PORT}, or %{QUERY_STRING} variables respectively. In any case, remember that regular expressions are substring matches. That is, you don ’ t need the regex to describe the entire string, just the part that you wish to match. Thus, using a regex of . is often sufficient rather than .*, and the regex abc is not the same as ^abc$.

以后再补充。。。。。

]]>
菜鸡求助, apache 开启了 Rewrite 后, 静态文件就 403 了 tag:www.v2ex.com,2016-11-02:/t/317599 2016-11-02T18:56:42Z 2016-11-02T17:56:42Z enenaaa member/enenaaa Rewrite 没打开之前一切正常, 打开后图片和 css,js 等静态文件出现 403 错误。

client denied by server configuration: /var/www/html/application/views/common.css

.htaccess 文件配置如下

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

conf 文件相关配置如下

<Directory "/var/www/html">

Options Indexes FollowSymLinks

AllowOverride All

Require all granted
</Directory>

版本是阿里云上的 httpd 2.4.6, 摆弄半天, 完全不知道为啥, 摊手。 ]]>
请教一个.htaccess 的问题,规则导致 url 重复了 tag:www.v2ex.com,2016-10-25:/t/315344 2016-10-25T07:51:08Z 2016-10-25T08:37:59Z nonozone member/nonozone 之前公司有几个网站放在 vps 上,结果老板觉得费用太贵,打算全部迁移到 bluehost ,以前用的 nginx 就不需要折腾.htaccess ,现在到了 bluehost 就需要搞这个东西了。

使用的.htaccess 规则是官方提供的

https://github.com/symphonycms/symphony-2/blob/master/install/includes/htaccess.txt

因为这个规则是针对网站在根目录的,而我的 bluehost 下有多个网站,所以我就把里面的 RewriteBase / 改成了 RewriteBase /abc.com/

现在导致的问题是,访问其中的网站,首页可以显示,但是里面的链接的 url 多次重叠,比如我有个网站 eyesion.com ,进去之后随便访问一个链接, url 都变成了 http://www.eyesion.com/eyesion.com/eyesion.com/eyesion.com/index.php/?symphony-page=eyesion.com/eyesion.com/eyesion.com/eyesion.com/index.php/&

这样的,想问下,这个问题要怎么解决,谢谢。

]]>
怎么让所有 HTTP 流量进过 APACHE?,(示意图) tag:www.v2ex.com,2016-09-30:/t/309959 2016-09-30T04:00:26Z 2016-09-30T03:57:26Z linus member/linus ############### |####################### |
############192.168.19.2###############192.168.19.100-200 ]]>
怎么样让 httpd 工作在网桥透传模式下,所有请求都能经过 httpd? tag:www.v2ex.com,2016-09-28:/t/309511 2016-09-28T06:17:51Z 2016-09-28T06:42:14Z linus member/linus 困扰我好久的 Tomcat 管理页面 403 tag:www.v2ex.com,2016-07-19:/t/293602 2016-07-19T15:54:46Z 2016-07-19T17:51:46Z glxin member/glxin 前几天买了阿里 ECS 用来学习用,搭建了 Tomcat9 ,结果这个链接( http://115.28.65.217:8080/manager/html )就是打不开,连登陆界面都没有,直接提示 403 。网上找了很多资料,说是修改 tomcat-users.xml ,但是这个文件我都改了好多次了,就是不行。这让我很纠结啊,大家能否帮帮忙,出个注意。另外这个是我第一次发帖,要是有不当之处还请指出,谢谢。

]]>
今天查看了下 access.log 发现一些奇怪的东西 tag:www.v2ex.com,2016-07-14:/t/292438 2016-07-14T04:29:06Z 2016-07-14T09:51:41Z wyx member/wyx 23.251.51.125 - - [14/Jul/2016:12:26:06 +0800] "GET http://www.proxy-listen.de/azenv.php HTTP/1.0" 302 253 "-" "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; Trident/5.0)" 23.251.51.125 - - [14/Jul/2016:12:26:07 +0800] "CONNECT www.baidu.com:443 HTTP/1.0" 405 731 "-" "-" 23.251.51.125 - - [14/Jul/2016:12:26:07 +0800] "\x80\x98\x01\x03\x01" 400 0 "-" "-"

是不是被挂马了呀?

]]>
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86