以下是我们当前在应用程序上的设置
但我们想将 nginx 添加为反向代理缓存,就像鱿鱼或清漆一样,是否可以编辑此配置以启用该缓存行为,或者我是否需要在此设置前面添加另一个 nginx,就像我为鱿鱼或漆
如果这可以在不使用鱿鱼和清漆的情况下完成,那么在 nginx 中完成完整的设置会很好
多谢
upstream backend_appname{
#start1.someserver.com
server start1.someserver.com:7810 fail_timeout=3s;
server start1.someserver.com:7811 fail_timeout=3s;
server start1.someserver.com:7812 fail_timeout=3s;
server start1.someserver.com:7813 fail_timeout=3s;
}
server {
server_name appname.someserver.com;
listen 80;
access_log logs/access_appname.log;
#error_log logs/error_appname.log;
location /nginx_status {
stub_status on;
access_log off;
}
location /static {
root /home/someuser/work/appname;
expires max;
add_header Cache-Control public,max-age=604800,post-check=604800,pre-check=1209600;
}
location / {
root /home/someuser/work/appname;
fastcgi_pass backend_appname;
set $addr $remote_addr;
if ($http_x_forwarded_for ~ "(?:^|,)\s*(\d+\.\d+\.\d+\.\d+)\s*$") {
set $addr $1;
}
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param …Run Code Online (Sandbox Code Playgroud) 我们将运行一个 nginx 反向代理,它将通过互联网从后端提取数据。
我们所说的通过互联网是指后端计算机不会与前端反向代理位于一个局域网上。
我们认为,在通过互联网发送这些请求之前,最好先处理一下这些请求。
在我看来,它应该像这样工作:
客户端请求带有接受编码标头或 gzip 的内容。
反向代理将其发送到后端服务器。
由于发送了 gzip 的接受编码标头,后端会压缩此内容。
请求在链上一路发送压缩。
我们都可以做到这一点,因为它非常简单。我的问题是,如果我们在 nginx 反向代理端启用了 gzip 压缩,这将如何工作?
nginx 会尝试对已经 gzip 压缩的内容进行 gzip 压缩吗?
希望这是有道理的。谢谢。
更新1:
我了解缓存已经(以及此服务)gzip 内容的含义。我们将修改缓存密钥以包含接受编码标头,从而根据用户代理可以接受的内容提供(并缓存)正确压缩/未压缩的内容。
我们使用 nginx 作为反向代理从上游服务器获取文件。\n这些文件不是动态的 \xe2\x80\x93 至少不是基于每个请求 \xe2\x80\x93 并且(有时)落后于高潜伏。
\n\n我想将对相同 URL 的请求限制为 1。
\n\n我想避免的行为示例:
\n\n127.0.0.1 - - [03/Jan/2013:16:08:15 +0100] "GET /part-00132.ts HTTP/1.0" 200 1506068 "-" "Prefetch" "-"\n127.0.0.1 - - [03/Jan/2013:16:08:28 +0100] "GET /part-00133.ts HTTP/1.0" 200 1189476 "-" "Prefetch" "-"\n127.0.0.1 - - [03/Jan/2013:16:08:29 +0100] "GET /part-00133.ts HTTP/1.0" 200 1189476 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17" "-"\n127.0.0.1 - - [03/Jan/2013:16:08:34 +0100] "GET /part-00133.ts HTTP/1.0" 200 1189476 "-" "Prefetch" "-"\n127.0.0.1 - - [03/Jan/2013:16:08:44 +0100] …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚当端点位于根上下文中时如何在 nginx 中配置反向代理:
http://frontend.com/mylink代理转发到http://10.0.0.2:8000/
不幸的是,我无法更改应用程序的上下文http://10.0.0.2:8000,因此我试图在 nginx 中找到解决此问题的方法。当有上下文时,以下配置通常可以正常工作,但在上述情况下不起作用:
location /mylink {
proxy_pass http://10.0.0.2:8000;
proxy_redirect http://10.0.0.2:8000 /mylink;
port_in_redirect off;
}
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么想法吗?
我使用 Nginx 作为多个服务器中多个应用程序的反向代理,并且尝试将通用缓存指令添加到每个应用程序的静态文件中。
我原来的配置是这样的:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
}
location /app2{
...
proxy_pass http://127.0.0.1:8082/app2;
}
...
Run Code Online (Sandbox Code Playgroud)
要添加静态文件指令,我可以向每个位置添加嵌套位置,如下所示:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
expires 1d;
...
proxy_pass http://127.0.0.1:8081;
}
}
location /app2{
...
proxy_pass http://127.0.0.1:8082/app2;
location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
expires 1d;
...
proxy_pass http://127.0.0.1:8082;
}
}
Run Code Online (Sandbox Code Playgroud)
由于我有大约 30 个应用程序,因此我尝试将代码简化为如下所示:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
include static_file_config.conf;
}
location /app2{
...
proxy_pass http://127.0.0.1:8081/app2;
include static_file_config.conf;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以简化代码,这样我就不会以 30 个相同的静态文件位置结束?
请注意,每个应用程序都有自己的静态文件。
我在我们公司的本地分支机构运行 Tomcat 7 服务器。该服务器通过端口 80 和 443 向公众开放。几天前,总部管理员更改了配置;Tomcat 现在需要通过反向代理连接。总部管理员更改了防火墙规则、更改了 DNS 条目并配置了反向代理。由于他们没有使用 tomcat 的经验,他们要求我更改配置,以便让 Tomcat 在 8080 上侦听来自反向代理的请求。
Tomcat的Connector定义如下:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<Connector
protocol="HTTP/1.1"
port="443" maxThreads="400"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="foobar.jks" keystorePass="foo_bar"
clientAuth="false" sslProtocol="TLS"/>
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" proxyName="server.company.com" proxyPort="443" />
Run Code Online (Sandbox Code Playgroud)
但是,当我从 Firefox 调用 URI 时,收到“重定向错误”,指出存在无法完成的重定向。在 Tomcat 访问日志中,有以下架构的条目:
<revere proxy internal ip> - - [14/Dec/2015:15:52:31 +0100] "GET / HTTP/1.1" 302 -
Run Code Online (Sandbox Code Playgroud)
如果我删除 proxyName 和 proxyPort 连接器属性,则会发送到 tomcat 内部服务器名称的重定向。
感谢任何解决此问题的帮助。
我有一个 IIS 服务器,它托管了许多站点和 API。这些站点包括 Confluence 和 Jira 实例。这些产品实际上运行自己的 Web 服务器,因此应用程序请求路由和 URL 重写模块被用于将传入请求反向代理到documents.example.com' and 'jira.example.com' tolocalhost:8080 andlocalhost:8090` - confluence 和 jira 实例正在运行的地方。
现在我正在尝试为一个小的简单存储服务器 (s3) api (minio) 设置反向代理——它托管在 localhost:9000 上——但 s3 协议要求主机头是其消息身份验证代码的一部分。
但是,当应用程序请求路由按照 URL 重写规则重新路由请求时,它还会重写主机标头以反映新的目标标头。
这可以通过设置禁用,system.webServer.proxy:preserveHostHeaders但只能在 ApplicationHost.config 中禁用,因为 ARR 运行服务器,而不是站点级别。
所以现在我有一个难题:
如果我设置了这个设置,那么在它们的 MAC 中使用主机头的 REST API 可以运行,但是 Confluence 和 Jira 作为它们支持的反向代理配置需要重写主机头。
作为参考,此设置可以保留主机标头
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
Run Code Online (Sandbox Code Playgroud) 我在代理服务器后面有一组应用程序,它们适当地转发请求并使用代理协议来保留请求的原始数据。这些应用程序还会相互发出请求,因此我希望它们接受使用和不使用代理协议的请求。是否可以将 Nginx 配置为以某种方式执行此操作而不使用其他server_name端口?
仅供参考 - 我怀疑这有一个非常明显/简单的答案(我是 nginx 的新手)
我使用动态上游作为我的 Nginx 配置的一部分。这意味着在proxy_pass指令中使用变量,resolver如果上游有问题(未知主机/不可连接),它会指示 nginx 使用而不是崩溃/不启动。
但是,这似乎也改变proxy_pass了对 URI 的处理。它不是用proxy_pass指令中指定的 URI 替换请求 URI ,而是忽略请求 URI。我正在寻找一种方法来保留(或重现)允许我继续使用动态主机的原始行为。
我试图在这里创建一个最小的示例配置:
server {
listen 80;
server_name my-server.com;
# My chosen DNS server (in this case, the Docker DNS)
resolver 127.0.0.11 valid=30s ipv6=off;
# This works
location / {
set $upstream frontend:8080;
proxy_pass http://$upstream;
}
# This does not work :-(
# The original URI (e.g. /api/users/tommy) is ignored, and
# all requests …Run Code Online (Sandbox Code Playgroud) 这是一个关于反向代理、它们如何工作以及如何配置的规范问题。
如何处理来自不同端口上的服务或来自具有相同网络服务器的不同服务器的请求并通过 URL 区分它?