我刚刚将 nginx 设置为反向代理,因此从该框提供的某些站点由它直接提供服务,而其他站点则转发到 Node.js 服务器。
然而,由 Node.js 提供服务的站点显示时没有 CSS 或图像,所以我认为链接以某种方式被破坏了,但不知道为什么。
以下是 /etc/nginx/sites-enabled 中唯一的文件:
server {
listen 80; ## listen for ipv4
listen [::]:80 default ipv6only=on; ## listen for ipv6
server_name dev.my.site;
access_log /var/log/nginx/localhost.access.log;
location / {
root /var/www;
index index.html index.htm;
}
location /myNodeSite {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
}
}
Run Code Online (Sandbox Code Playgroud)
我原以为它可能是因为第一次进入而试图在 /var/www 中找到它们,但删除它似乎没有帮助。
我的问题与此非常相似:nginx proxy pass redirects ignore port
我正在使用 nginx 1.0.14。
我希望能够通过 ssh 隧道进入我的 Django 网站,以便我可以远程工作。我在我的个人电脑上测试了一个简单的 Django 项目,使用非常简单的 nginx 配置(启动器,默认)。我隧道和重定向返回端口号作为 url 的一部分。所以我确定这不是 Django 问题。主要是我的nginx配置。
这是相关的部分。
server {
listen 80;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
# location other services go here
location ~ /forum/(.*)$ {
#rewrite ^(.*):(.*)/forum(.*)$ /$2 last;
#rewrite ^(.*)$ http://localhost:8000/$1;
#rewrite ^/forum(.*)$ $1 break;
# the forum service runs as local, listens to 8000 port...
proxy_pass http://localhost:8000;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Run Code Online (Sandbox Code Playgroud)
那么如果我 …
我正在测试运行 HAProxy 作为 Apache 2.2 后面的专用负载均衡器,替换我们当前使用 Apache 负载均衡器的配置。在我们当前的 Apache 设置中,如果所有后端(源)服务器都关闭,Apache 将提供 503 服务不可用消息。使用 HAProxy,我得到 502 错误的网关响应。
我在 Apache 中使用了一个简单的反向代理重写规则
RewriteRule ^/(.*) http://127.0.0.1:8000/$1 [last,proxy]
Run Code Online (Sandbox Code Playgroud)
在 HAProxy 我有以下(在默认 tcp 模式下运行)
defaults
log global
option tcp-smart-accept
timeout connect 7s
timeout client 60s
timeout queue 120s
timeout server 60s
listen my_server 127.0.0.1:8000
balance leastconn
server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
Run Code Online (Sandbox Code Playgroud)
在后端服务器关闭时测试直接连接到负载均衡器:
[root@dev ~]# wget http://127.0.0.1:8000/ test.html
--2012-05-28 11:45:28-- http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP …Run Code Online (Sandbox Code Playgroud) 我正在运行 TileMill,它正在从本地主机监听端口 20008 和 20009。我希望 20009 只能通过端口 80 上的 nginx 访问(使用简单的身份验证)。我希望 20008 可以从外部“直接”访问。
server {
listen 80;
server_name localhost;
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:20009;
auth_basic "Restricted";
auth_basic_user_file htpasswd;
}
}
server {
listen 20008;
server_name localhost;
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:20008;
}
}
Run Code Online (Sandbox Code Playgroud)
明显的问题是 nginx 无法侦听端口 20008 - 它已被 TileMill 使用。
Restarting nginx: nginx: [emerg] bind() to 0.0.0.0:20008 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:20008 failed (98: Address already in …Run Code Online (Sandbox Code Playgroud) 我在 httpd.conf 中添加了以下内容(在 VirtualHost 之后):
<VirtualHost *:80>
ServerName XXX.XXX.XXX
<Directory proxy:>
Order allow,deny
Allow from 10.52.208.221
Allow from 10.52.208.223
Deny from all
</Directory>
ProxyPass / http://XXX.XXX.XXX/
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/admin/$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但是,我可以从其他 IP 访问我的 VirtualHost:
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.4 (Santiago)
# uname -a
Linux XXXXX.XXXXX.XXX 2.6.32-358.18.1.el6.x86_64 #1 SMP Fri Aug 2 17:04:38 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux
# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: Aug 2 …Run Code Online (Sandbox Code Playgroud) 我有一个 Spring MVC 应用程序,它使用 Spring Security 进行登录。我使用 Apache Webserver 作为代理和 Tomcat。下面是我的 /etc/apache2/sites-enabled/example.com.conf 文件:
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ProxyPreserveHost On
ProxyRequests off
ProxyPass /myapp/j_spring_security_check http://XX.YY.ZZ.WW:8080/myapp/j_spring_security_check
ProxyPassReverse /myapp/j_spring_security_check http://XX.YY.ZZ.WW:8080/myapp/j_spring_security_check
ProxyPass /myapp http://XX.YY.ZZ.WW:8080/myapp
ProxyPassReverse /myapp http://XX.YY.ZZ.WW:8080/myapp
Run Code Online (Sandbox Code Playgroud)
我的问题是现在我必须访问我的网站:
www.example.com/myapp
我想在哪里访问它
www.example.com
我尝试使用它,但随后登录无法正常工作。我应该如何为此设置 ProxyPass 和 ProxyPassReverse?
这是我的nginx配置:
server {
listen 80;
server_name example.com;
location /assets {
root /var/www/frappe/sites/assets;
try_files $uri $uri/ =404;
}
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://127.0.0.1:8000;
proxy_redirect off;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望 /assets 目录由 NGINX 处理,而其他所有内容都由运行在 8000 上的 python 服务器处理。但是,我仍然在资产目录上得到 404。
我究竟做错了什么?资产目录可由 www-data 读取。
我正在尝试将 Nginx 配置为缓存反向代理。源服务器是 Apache,它托管一个 WordPress 实例,如果这很重要的话。
反向代理功能按预期工作,但缓存似乎不起作用。如果我连续两次获得相同的静态资源,我就会获得x-proxy-cache: MISS两次。
assodigitale.it 是域,138.201.87.123 是源服务器 IP 地址,138.201.87.124 是 Nginx 代理 IP 地址。
源服务器似乎回复允许代理缓存资源:
$ curl --connect-to ::138.201.87.123:443 --http2 -I https://assodigitale.it/wp-content/uploads/2018/03/aereo.jpg
HTTP/2 200
date: Sun, 11 Mar 2018 20:59:39 GMT
server: Apache/2.4.25 (Debian)
content-length: 32989
strict-transport-security: max-age=31536000; includeSubdomains; preload
last-modified: Wed, 07 Mar 2018 09:34:41 GMT
etag: "80dd-566cf44ca2952"
accept-ranges: bytes
vary: Accept-Encoding
cache-control: max-age=1209600, public
x-content-type-options: nosniff
content-type: image/jpeg
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,对代理服务器的第一个请求会导致 MISS:
$ curl --connect-to ::138.201.87.124:443 --http2 -I https://assodigitale.it/wp-content/uploads/2018/03/aereo.jpg
HTTP/2 200
server: nginx/1.13.9
date: …Run Code Online (Sandbox Code Playgroud) 在解压并启动 keycloak 以侦听 127.0.0.1 后,我将 nginx 配置为可通过 https 从公共可用域访问的反向代理。
这是nginx配置:
http
{
server_tokens off;
upstream keycloak { ip_hash; server 127.0.0.1:8080; }
server
{
server_name name.domain.tld;
listen 443 ssl http2; # managed by Certbot
ssl_certificate /path/to/cert; # managed by Certbot
ssl_certificate_key /path/to/key; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location /
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Access-Control-Allow-Origin *;
proxy_pass http://keycloak;
}
}
server …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 nginx 配置为后端 Domino 服务器上的 Web 应用程序的反向代理服务器。我们有 99.9% 的工作,但最后 0.1% 真的让我烦恼。
我来解释一下。在某些情况下,应用程序返回部分刷新,并带有一个名为 的特殊响应标头X-XspLocation。如果存在,则它包含要由客户端重定向到的 url。它是 XPage 环境生成和使用的标头,我的代码本身不会设置或读取它。那么它的值是:
http://localhost:81/database.nsf/page.xsp/ThankYou
Run Code Online (Sandbox Code Playgroud)
我希望它就是这样:/ThankYou
我尝试了一百万种方法,但似乎不可能改变它的价值。只要我使用proxy_hide_header X-XspLocation;没有新的标题就可以使用add_header! 如果我忽略隐藏,我会在标题中得到双倍值,所以我知道我的替换值是正确的。这是我最近失败的尝试:
map $sent_http_x_xsplocation $xsplocation_new {
"~http://localhost:81/database.nsf/page.xsp/(.*)" "/$1";
}
server {
...
location / {
proxy_pass http://localhost:81/database.nsf/page.xsp/;
# redirect X-XspLocation
proxy_hide_header X-XspLocation;
add_header X-XspLocation $xsplocation_new;
#add_header X-XspLocation2 $xsplocation_new;
}
}
Run Code Online (Sandbox Code Playgroud)
我什至尝试用 njs 来更改标题,它可能失败了,因为我不知道如何使用 js_set 或 js_content 来调用一个不返回任何内容的函数。
为什么修改响应头这么难?
真正的问题当然是:我怎样才能做到这一点?谢谢你的协助!!
更多信息
为了证明该地图有效,我进行了以下测试:
location / {
proxy_pass http://localhost:81/database.nsf/page.xsp/;
# redirect X-XspLocation
# proxy_hide_header X-XspLocation;
# add_header X-XspLocation …Run Code Online (Sandbox Code Playgroud) reverse-proxy ×10
nginx ×7
apache-2.2 ×3
cache ×1
django ×1
haproxy ×1
ibm-domino ×1
mod-proxy ×1
node.js ×1
proxy ×1
proxypass ×1
ssh-tunnel ×1
tomcat ×1