我有一个在本地机器上开发的 ember.js 应用程序。我使用 restify/node.js 服务器使其在本地可用。
当我在我的应用程序中导航时,地址栏会发生如下变化:
示例 1
1. http://dev.server:3000/application/index.html#about
2. http://dev.server:3000/application/index.html#/items
3. http://dev.server:3000/application/index.html#/items/1
4. http://dev.server:3000/application/index.html#/items/2
我现在尝试将它部署在运行 nginx 的远程测试服务器上。
尽管一切都在本地运行良好,但我可以导航到我的 Web 应用程序,但主题标签之后的 URI 部分没有更新。
在任何浏览器中:http://test.server/application/index.html
始终显示在我的地址栏中。对于与示例 1中相同的点击序列,我总是有:
1. http://web.redirection/application/index.html
2. http://web.redirection/application/index.html
3. http://web.redirection/application/index.html
4. http://web.redirection/application/index.html
此外,如果我直接输入完整的 URI http://web.redirection/application/index.html#/items/1
,浏览器将只显示其所在的内容http://test.server/application/index.html
(这绝对不是预期的行为)。
我想这来自我的 NGINX 配置,因为该应用程序可以在本地 restify 服务器上完美运行。
此服务器的 NGINX 配置为:
test.server.conf(符号链接到 /etc/nginx/sites-enabled/test.server.conf)
server {
server_name test.server web.redirection;
root /usr/share/nginx/test;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
location ~ \.csv$ {
alias /usr/share/nginx/test/$uri;
}
}
nginx.conf
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log debug;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
编辑: 只是为了确保我的测试服务器上没有丢失的文件:我运行了一个 restify/node 服务器(就像在我的开发机器上一样),当我连接到这个服务器时一切正常(!)。nginx 和 restify 服务器都指向相同的文件。
编辑 2
我发现我的问题发生在我使用网络重定向时。如果我使用像http://test.server/application/index.html
一切正常的地址如果我使用http://web.redirection/application/index.html
它不起作用。
所以这是我的 nginx 配置,它没有正确地将 web.redirection URI 重定向到 test.server 或类似的东西。
有人有想法吗?我想念什么?我应该改变什么才能使这项工作?
编辑 3 和解决方案
我使用的 Web 重定向是 A 类 DNS 记录。这不起作用。使用 CNAME 类型的 DNS 记录可以解决该问题。