我已经阅读了很多关于这个问题的内容(包括本网站中的所有主题),但无法做出决定性的决定。
对于非常高负载的站点(每天数百万用户),什么被认为更好(性能和安全方面):
我不明白的是 - 如果 Nginx 可以运行动态内容,为什么还要使用 Apache?
我正在努力让 Apache 为 Django 项目提供静态文件。我的 VirtualHost 有:
Alias /static/ /home/jonathan/pragmatometer/static/
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/
Run Code Online (Sandbox Code Playgroud)
但是对 /static/css/style.css 的请求是由 Django 进程提供的,而不是对 /home/jonathan/pragmatometer/static/css/style.css 的静态拉取。
我该怎么做才能让 Alias 胜过代理?我可以尝试为 /load/、/save/、/admin/ 拼凑几个 ProxyPass / ProxyPassReverse 定义,但这肯定是错误的方式。
那么正确的方法是什么?
我正在尝试根据传入的用户名在两个 ssh 服务器之间进行多路复用,即
ssh user1@testserver 将转到一个 sshd 实例,而 user2@testserver 将转到另一个。
这能做到吗?
我的团队编写了一个内部 BI 服务器,它在/users/daily或等链接处生成 HTML 报告/updates/questions。
服务器是用Grails编写的,它与经典的 Apache-Tomcat 设置完美配合:
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
Run Code Online (Sandbox Code Playgroud)

所以
https://example.com/users/daily
Run Code Online (Sandbox Code Playgroud)
在内部代理到
http://localhost:8080/users/daily
Run Code Online (Sandbox Code Playgroud)
并由 Tomcat servlet 提供服务。
服务器成功,我想将它部署三次,到 3 个不同的系统,由 URL 后缀 ( /dev, /stg, /prod)区分:

这意味着https://example.com/dev/users/daily将从 代理http://localhost:8080/users/daily,并将https://example.com/prod/users/daily从http://localhost:8082/users/daily.
我尝试了一些 ApacheRewriteRule和ProxyPass规则,但找不到有效的组合。
如何在具有工作内部链接的 Apache 中进行基于后缀的内部路由?
我正在尝试将 NGINX 设置为我的 NodeJS 应用程序的前端,该应用程序已上线127.0.0.1:3000,但我无法解决此 502 错误。NGINX 可在本地访问http://55.55.55.5/或访问http://dev.example
dev.example(文件在:/etc/nginx/sites-available 并符号链接到启用站点)
upstream up_dev.example {
server 127.0.0.1:3000;
}
server {
listen 0.0.0.0:80;
server_name dev.example example;
access_log /var/log/nginx/dev.example.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://up_dev.example/;
proxy_redirect off;
}
}
Run Code Online (Sandbox Code Playgroud)
错误日志
2014/09/17 19:38:26 [错误] 1679#0:*1 connect() 失败(111:连接被拒绝),同时连接到上游,客户端:55.55.55.1,服务器:,请求:“GET / HTTP/ 1.1",上游:$
基本上我有一个 API 农场
192.168.1.1、192.168.1.2、192.168.1.3
但是,端点具有不同的文件夹结构(我无法修改的第 3 方!)
所以基本上我想要一个像这样的 nginx 配置
upsteam api_servers{
server 192.168.1.1/api/;
server 192.168.1.2/myApp/api/;
server 192.168.1.3/;
}
server{
listen 80;
location / {
proxy_pass http://api_servers;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,您不能在上游服务器中拥有路径。我想我必须重写这些?我知道如何为传入的请求重写它,但不确定当它到达每个后端服务器时如何以不同的方式重写它。
提前谢谢了!!
我有一个 ProxyPass 配置为达到以下目的:在我的服务器上,我启动了一个服务,该服务提供一个 Rest-API 监听端口 7777。从客户端,我希望能够像这样调用这个 API: http://example.org/servicename/PARAMETER
对此 API 的完整调用应如下所示: HTTP PUT @ http://example.org/servicename/PARAMETER(其中PARAMETER是某个字符串)。在内部,这应该转换为以下网址:http://server.ip:7777/servicename/PARAMETER
只要 PARAMETER 不是这样的(!),一切都会按预期工作:(http://parameter.org实际上我需要对其进行 URL 编码:)http%3A%2F%2Fparameter.org。总而言之,电话是http://example.org/servicename/http%3A%2F%2Fparameter.org
将http://在参数混淆阿帕奇导致在回复呼叫以下错误信息:
!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /servicename/http://parameter.org was not found on this server.</p>
<hr>
<address>Apache/2.2.22 (Debian) Server at example.org Port 80</address>
</body></html>
Run Code Online (Sandbox Code Playgroud)
http%3A%2F%2Fparameter.org例如,如果我替换为test,则一切正常。http://参数中的不知何故混淆了apache。有没有办法让 apache 忽略它?
我目前对这个虚拟主机的配置如下所示:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/example
ServerName …Run Code Online (Sandbox Code Playgroud) 我有一个服务器配置为通过设置代理:
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=backcache:8m max_size=20g inactive=7d;
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
Run Code Online (Sandbox Code Playgroud)
尽管如此,当我启动 nginx 时,我最终也得到了 /var/lib/nginx/proxy。两者都开始填满,最终硬盘驱动器填满。
如果我尝试让我的 proxy_cache_path 指向 /var/lib/nginx/proxy,我会收到错误消息:
nginx: [emerg] the same path name "/var/lib/nginx/proxy" used in /etc/nginx/conf.d/proxy.conf:1 and in /etc/nginx/nginx.conf:62
nginx: configuration file /etc/nginx/nginx.conf test failed
Run Code Online (Sandbox Code Playgroud)
nginx.conf 的第 62 行只是 http{} 部分的结尾,所以我认为这是在抱怨我试图覆盖的“默认”。
我不知道如何禁用这个代理配置,它似乎复制了我设置的显式配置。有没有办法覆盖/删除该默认代理配置?
我正在配置将用作反向代理的新 Nginx 服务器。我们有运行 Apache 的旧 Debian 服务器。在这个 apache 服务器上,只有 HTTPS 访问的站点我想隐藏在代理后面。
从代理到上游 Apache 的连接必须通过 HTTPS(服务器位于不同的位置,Apache 只允许 HTTPS 访问)。
我的问题是从 Nginx 到 Apache 的连接失败。从浏览器到上游通过 HTTPS 的正常连接没有问题。从同一代理到 Nginx 上游的连接有效。当 Nginx 尝试连接到上游 Apache 连接失败并重新协商握手失败时
来自代理 Nginx 的日志(调试级别)仅表示:
2016/04/07 15:51:08 [error] 5855#0: *1 upstream prematurely closed connection while reading response header from upstream, client: 94.113.97.9, server: procrastination.com, request: "GET / HTTP/1.1", upstream: "https://77.240.191.234:443/", host: "procrastination.com"
Run Code Online (Sandbox Code Playgroud)
从上游 Apache 登录:
[Thu Apr 07 15:36:48 2016] [info] Initial (No.1) HTTPS request received for child 35 (server …Run Code Online (Sandbox Code Playgroud) 我的组织通过代理引导所有流量。作为代理设置,我们需要为 http_proxy 和 https_proxy 环境变量使用 http 代理设置。
如果我将 https_proxy 变量设置为同一代理的 https 版本,则某些使用 https_proxy 环境变量的程序将停止工作。
那么这是否意味着代理不支持https连接?在我的浏览器中正常加载的 https 网站呢?