【问题标题】:nginx: how to always redirect to different host when we redirectnginx:当我们重定向时如何总是重定向到不同的主机
【发布时间】:2017-01-13 02:53:28
【问题描述】:

标题有点误导,但我想不出更好的。

我在 CloudFront 后面托管一个 nginx 服务器。可以通过 origin.website.com 访问 nginx 服务器,这是 CloudFront 的来源。 CloudFront 分发版托管在 website.com

有没有办法让它在每次重定向时重定向到website.com/$uri 而不是origin.website.com/$uri

我正在尝试涵盖我的所有基础,但我确实有一个特定的问题:

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  origin.website.com website.com;
        add_header X-server-choice "default";
        add_header X-heard-uri "$uri";

        root /var/www;
        client_max_body_size 200M;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass http://localhost:8080;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }
        location /blog {
                alias /var/www/blog;
                index index.php;
                try_files $uri $uri/ @site_rewrite;
        }

        location @site_rewrite {
                rewrite ^/blog/(.*)$ /blog/index.php?$1;
        }

        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/$fastcgi_script_name;
                include        fastcgi_params;
        }

        location ~ /\.ht {
                deny  all;
        }

}

每当我转到 website.com/blog 时,它都会重定向到 origin.website.com/blog/。它似乎正在通过location /blog 并在try_files $uri $uri/ @site_rewrite 中重定向而不通过site_rewrite

有什么想法吗?谢谢!

【问题讨论】:

  • website.com ClodFront 的分发 CNAME 吗?
  • @DmitryMiksIr 是的。大多数时候它都有效。只有在 website.com/blog 上才会搞砸
  • 好吧,我认为这个重定向是由你的 php 博客生成的。
  • @DmitryMiksIr 哦,这真的很聪明,我没想到。谢谢!

标签: nginx


【解决方案1】:

我认为您可以为重写目标放置一个完整的 url,即

rewrite ^/blog/(.*)$ $scheme://website.com/blog/index.php?$1 redirect;

【讨论】:

  • 是的,这一切都很好,但我相信重写实际上发生在try_files,正如我在问题中提到的那样。
  • 为了进一步的证据,我试过了,但没有用
  • 这意味着它在 $uri 或 $uri/ 上的匹配。您也可以像这样放置一个单独的服务器块:server { listen 80; server_name origin.website.com; return 301 $scheme://website.com$request_uri } ,它将所有 origin.website.com 重定向到 website.com。您必须从上面粘贴的服务器块中的 server_name 中删除 origin.website.com。
  • 这将导致重定向循环,因为 CloudFront 向服务器询问 origin.website.com 而不是 website.com。我只想让它重定向到website.com,只有当它无论如何都要重定向时。
猜你喜欢
  • 2018-06-16
  • 2011-03-26
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
相关资源
最近更新 更多