【问题标题】:nginx - rewrite domain.com:port to sub.domain.comnginx - 将 domain.com:port 重写为 sub.domain.com
【发布时间】:2012-03-17 08:03:03
【问题描述】:

如何将带有端口的域重写为子域?

e.q.:domain.com:3000sub.domain.com ?

感谢您的帮助! :)

问候

【问题讨论】:

    标签: proxy nginx subdomain rewrite


    【解决方案1】:

    如果您真的想重定向(301 或 302)您的网络流量

    您创建一个侦听端口 3000 的 server {} 部分,然后将其重定向到另一个侦听端口 80 的 server {} 部分。在每个 server {} 部分中适当地设置 listen 属性。 我猜您正在尝试在单个 server 部分中处理重定向,并且根据 this page listen 指令适用于 server 上下文

    如果你想使用 nginx 作为代理

    那么您正在寻找的是 proxy_pass 指令。这是从配置中提取的示例配置,我必须使用 nginx 作为我的 rails 应用程序的代理(瘦)。基本上我的应用程序在端口 3200 上本地运行(但它也可以在远程主机上运行),相关的 nginx 配置部分如下所示:

      upstream my-app-cluster
      {
          server localhost:3200;
      }  
      server
      {
        listen       80;
        server_name mydomain.com;
      
        root /root/to/public/folder;
        
        access_log  /my/app/log/folder/myapp.log;
        
        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_redirect off;
      
          if (-f $request_filename/index.html) {
            rewrite (.*) $1/index.html break;
          }
          if (-f $request_filename.html) {
            rewrite (.*) $1.html break;
          }
          if (!-f $request_filename) {
            proxy_pass http://my-app-cluster;
            break;
          }
        }
      
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
          root   html;
        }
      
      }
    

    【讨论】:

    • 我忘了提到它是一个 ruby​​ on rail (github.com/gitlabhq) 应用程序,它正在侦听端口 3000 Restarting nginx: nginxnginx: [emerg] bind() to 0.0.0.0:3000 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:3000 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:3000 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:3000 failed (98: Address already in use) nginx: [emerg] still could not bind() My Server Sections pastebin.com/6yacUyDV `
    • 更新了我的答案。你在这里的情况是正常的。你的 Rails 应用程序监听 3000 端口,这个过程完全独立于 nginx。如果你设置 nginx 也在端口 3000 上运行,你会收到上面的消息。一次只能有 1 个进程侦听给定端口。如果你停止你的 rails 应用程序,然后运行 ​​nginx,然后启动你的 rails 应用程序,那么 rails 会告诉你该地址已经在使用中:)
    • 谢谢!!这是我关于stackoverflow的第一个问题,它已经得到了回答! :)
    【解决方案2】:

    您可以在 nginx 中使用Passenger 来交付Ruby 应用程序——这就是我们目前使用的方法。

    http://www.modrails.com/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-11
      • 2012-05-25
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2011-12-31
      相关资源
      最近更新 更多