假设我有以下子域及其自己的文档根等:
monad2.mysite.com
Run Code Online (Sandbox Code Playgroud)
我希望所有请求都代理到一个 IP(例如193.159.3.129),但它们必须通过服务器mysite.com(假设monad2在同一台服务器上)。
我有以下(htaccess)配置,它适用于子域,但无法代理任何其他请求......
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://193.159.3.129/$1 [P]
Run Code Online (Sandbox Code Playgroud)
我的问题是,虽然它确实适用于http://monad2.mysite.com/a.php(url 保持不变),但它不适用于(urlhttp://monad2.mysite.com/a/b转换为http://193.159.3.129/a/b)之类的请求。请注意,后一个地址显示了代理服务器的目录列表,这是正确的,只是子域更改为 ip。
另外,我认为这个系统肯定不能用于 HTTPS 请求,对吗?
编辑:经过更多的故障排除后,我确切地找到了问题发生的时间。每当我尝试访问没有最后一个斜杠的目录时,代理就会失败,我最终会得到一个 IP。一些例子:
Original | Result
--------------------------------+--------------------------------
http://monad2.mysite.com | http://monad2.mysite.com
http://monad2.mysite.com/a/ | http://monad2.mysite.com/a/
http://monad2.mysite.com/a | http://193.159.3.129/a/ <- !
http://monad2.mysite.com/a.php | http://monad2.mysite.com/a.php
Run Code Online (Sandbox Code Playgroud) 我明白,在“webmail.chemistry.iit.edu”的方向上,“chemistry”是一个子域,“webmail”是主机名。那么,根据 Google 的文档,为什么在“mail.google.com”中,“mail”是一个子域?将主机名放在域的左侧不是强制性的吗?
我想用 Nginx 做一些事情。假设我有几个用户和一个子域,每个用户在/home/dev/sites/USER_ID. 我想USER_ID.dev.example.com指向那个目录。
我试过制作一个 vhost 文件如下:
server {
listen 80;
server_name ~^(?<site_id>)$.dev.example.com;
root /home/dev/sites/$site_id;
index index.php;
location / {
try_files $uri $uri/ /index.php?$uri&$args;
}
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,所有发生的事情是它显示了我的 PhpMyAdmin 安装(显然另一个虚拟主机指向它)。有人能告诉我我做错了什么吗?我有一种感觉,它只是糟糕的 Regex,但我不确定。
我有一个子域dramarsarin.crimsonandcyan.com,我想指向另一台服务器。我在主机 'dramarsarin' 的 crimsonandcyan.com 的区域文件中添加了一条 A 记录,并将其指向服务器的 IP 地址。
现在,当我在 pingdom.com 上为我的子域进行 dns 检查时,我得到以下信息:
No delegation could be found at the parent, making your zone unreachable from the Internet.
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?我确实看到有时解析子域需要很长时间。这就是为什么我认为 pingdom.com 的分析非常有效。
我无法访问子域。
例如http://electricien.synerciel.fr正在工作。
但是,对于子子域http://electricite-lemonnier.electricien.synerciel.fr/返回DNS_PROBE_FINISHED_NXDOMAIN
这是 DNS 配置:

我不知道发生了什么。我找不到任何有效资源来解释错误消息的含义。
我目前在我的服务器上设置了 nginx my.server.com。使用当前配置,我使用http://my.server.com/app1或访问不同的应用程序http://my.server.com/app2。
我有一个这样的apps.conf位置:/etc/nginx/sites-enabled/
upstream app1_servers {
server 172.12.11.10:8080;
}
upstream app2_servers{
server 172.12.11.10:9090;
}
server {
listen 80;
server_name my.server.com;
return 301 https://my.server.com/$request_uri; #force https
}
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/my.server.com/cert.pem;
ssl_certificate_key /etc/ssl/my.server.com/priv.pem;
server_name my.server.com;
location /app1 {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://app1_servers/app1;
proxy_redirect http://$host https://$host;
proxy_set_header Host $host;
}
location /app2 {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host; …Run Code Online (Sandbox Code Playgroud) 我已经在谷歌云平台成功设置了负载均衡器
如果我使用如图所示的 IP,我可以测试并验证设置是否按我的计划工作。
现在我想将域名映射到 IP。我想用www.mycompany.com. 我已经创造了一个A纪录,我的DNS指向www到1.2.3.4。但是域名给出了 404 错误。
我确定我需要将这个新域名与 IP 地址相关联。
没有明显的地方可以在load balanceing或external IP addresses屏幕上进行。
我可以在哪里做?
我是 StackExchange 的新手,正在尝试寻找一些有关配置问题的帮助。我需要为 HAProxy 创建一个配置,它允许我将 Tomcat 应用程序上下文路径动态代理到子域。子域/路径不能硬编码,应设置为变量。我已经查看了整个站点中建议的其他内容,但没有一个涉及这个特定问题。到目前为止,我已经从各种现有建议中汇总了此配置。
这就是我需要的。
http://site1.domain.com/pathhttp://<ip>:8080/site1/path当 tomcat 应用程序返回指向资产的链接时,它们也会有一个需要重定向的路径。
https://site1.example.com/site1/image.jpghttps://site1.example.com/image.jpg我已经使用本网站的示例和其他指南获得了这么多,但我在这方面的知识有限。我不确定如何删除路径中的 site1。
# Frontend Definition
frontend tomcat_contexts
bind *:80
bind *:443 ssl crt /etc/haproxy/cert.pem
acl http ssl_fc,not
http-request redirect scheme https if http
reqadd X-Forwarded-Proto:\ https
default_backend cluster
# Backend Definition
backend cluster
balance roundrobin
cookie JSESSIONID prefix nocache
# Perform Subdomain url rewrite
http-request set-var(req.subdomain) req.hdr(host),lower,regsub(\.example\.com$,) if { hdr_end(host) -i .domain.com }
http-request …Run Code Online (Sandbox Code Playgroud) 我已为我的域生成 Lets Encrypt通配符证书*.domain.com。
我认为该证书对于任何嵌套子域都有效*.*.domain.com,例如it.*.domain.com或fr.*.domain.com。但浏览器给我错误,该通配符证书是为 颁发的domain.com,而不是为*.domain.com。我尝试*.*.domain.com使用 CertBot 颁发新证书,但出现错误(不允许使用多个通配符)。
是否可以实现此目的,或者我是否必须为每个第一级子域手动颁发通配符证书?
我有一个 OpenWRT 路由器设置,192.168.1.1带有搜索域local(而不是默认的lan)。
我有一个服务器设置,192.168.1.200,主机名,server.local。
我有一个工作站 ,192.168.1.10主机名workstation.local。
server.local还运行 NGINX 反向代理,以提供子域,例如sub.server.local.
如果我的工作站尝试访问 ,server.local则会正确解析为指向192.168.1.200。
但是,如果我的工作站尝试访问 ,sub.server.local它无法解析为192.168.1.200。
如果我的工作站已将192.168.1.200 sub.server.local, 添加到其主机文件中,则它可以正确解析,并且服务器反向代理会将传入连接路由到正确的端口。
我该如何解决这个问题,以便所有子域都server.local解析为192.168.1.200?不必为服务器上的每个子域添加主机记录到每个工作站,这显然是不可持续的。
我假设我需要更改 OpenWRT 路由器上的一些 DNS 记录,但是查看 Luci(Web 界面)中的设置,没有发现任何内容能够实现此目的。
有任何想法吗?
subdomain ×10
nginx ×2
.htaccess ×1
a-record ×1
apache-2.2 ×1
domain ×1
domain-name ×1
haproxy ×1
hostname ×1
ip ×1
lets-encrypt ×1
openwrt ×1
proxy ×1
regex ×1
routing ×1
tomcat ×1
virtualhost ×1
wildcard ×1