【发布时间】:2014-05-31 02:29:34
【问题描述】:
在我的 VPS 上,我有两个虚拟服务器用于:1) apache 应用程序(博客),2) 主应用程序
博客(我们称之为 app1)可以通过以下方式作为子域访问:blog.sitename.com -> app1。
主应用程序也具有语言子域访问权限,因此我定义了这样的通配符访问权限:
*.sitename.com -> app2。
默认情况下,sitename.com 解析为 app2。
直到上周四或周五,一切都很好(不记得确切的日期)。
问题是:blog.sitename.com 开始被app2(而不是 app1)解决,因此最终用户登陆 app2 页面并且“博客”被视为一种语言。
我还注意到我的某些浏览器(例如 Safari)没有出现这个问题。 我尝试清除其他浏览器的缓存和 cookie,然后它又开始工作了。
当然,我无法向我网站的用户解释这一点,那么有什么方法可以使缓存(或任何缓存)无效,以便一切重新开始工作?
是的,我尝试在 nginx.conf 文件中设置 sendfile off 并重新启动 nginx - 没有用。
upstream app2 {
server unix:/tmp/app2.sock fail_timeout=0;
}
server {
server_name blog.sitename.com;
access_log /var/log/nginx/blog.sitename.com.access.log main;
error_log /var/log/nginx/blog.sitename.com.error.log;
root /var/www/app1; # Wordpress blog
index index.php;
location / {
index index.php;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8081;
proxy_redirect off;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
server {
server_name sitename.com 123.123.123.123;
rewrite ^(.*) http://www.sitename.com$1 permanent;
}
server {
listen 80 default deferred; # for Linux
listen 443 ssl; # Handle SSL connection
ssl_certificate /root/ssl/ssl.crt;
ssl_certificate_key /root/ssl/ssl.key;
client_max_body_size 4G;
server_name *.sitename.com;
root /root/app2/public;
keepalive_timeout 10;
try_files $uri/index.html $uri.html $uri @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # HTTP or HTTPS
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app2;
}
# serve static assets
location ~ ^/(assets)/ {
gzip_static on;
expires 1y;
add_header Cache-Control public;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /root/app2/public;
}
}
【问题讨论】:
-
@AlexeyTen 编辑了我最初的帖子。这就是整个配置文件的内容!它已经这样工作了将近半年(也许更多)。但是上周发生了一些事情。又怎么会和浏览器缓存有关——我不太明白
-
大概你去httpS://blog.sitename.com?
-
嗯,博客(app1)没有HTTPS连接。
-
这就是为什么对
https://blogs.sitename.com的请求最终会出现在唯一一个监听 https 的服务器块中。 -
@AlexeyTen - 为什么?为什么它会这样工作很长时间?为什么它依赖于浏览器数据?
标签: apache http caching nginx routing