Apache-2.2

配置 nginx 伺服器以處理來自多個域的請求

  • November 15, 2013

案例:-我正在開發一個 Web 應用程序,它允許創建 HTML 模板並將它們發佈到亞馬遜 S3 上。現在發布我使用 nginx 作為代理伺服器的網站。代理伺服器的作用是,當使用者輸入網站 URL 時,我想確定如何檢查請求是否來自我的應用程序,即app.mysite.com(這不會改變)並將其路由到 apache 以進行正常訪問,如果它來自其他域,例如正常 URL www.mysite.com(這需要動態處理。可以是隨機的)它會轉到託管模板的 S3 儲存桶。

我目前的配置是:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;

pid        /var/run/nginx.pid;

events {
 worker_connections  1024;
}


http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

charset   utf-8;
keepalive_timeout  65;
server_tokens       off;
sendfile            on;
tcp_nopush          on;
tcp_nodelay         off;

用於擷取未定義主機名的預設伺服器塊

   server {
     listen 80;
     server_name  app.mysite.com;

      access_log  off;
      error_log off;

     location / {
       proxy_pass http://127.0.0.1:8080;
       proxy_set_header        X-Real-IP       $remote_addr;
       proxy_set_header        Host            $host;
       proxy_redirect          off;
       proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_connect_timeout 90;
       proxy_send_timeout 90;
       proxy_read_timeout 90;
       client_max_body_size 10m;
       client_body_buffer_size 128k;
       proxy_buffer_size 4k;
       proxy_buffers 4 32k;
       proxy_busy_buffers_size 64k;
     }
}

}

載入所有站點

   include  /etc/nginx/conf.d/*.conf;

更新,因為我不夠清楚:-

我的問題是如何處理配置文件中的兩個域。我的 nginx 是 EC2 實例上埠 80 上的代理伺服器。這也託管了我在不同網路上的 apache 上執行的應用程序埠。因此,對我的應用程序的任何請求都將來自域app.mysite.com,並且我還想代理儲存桶內的 S3 上的託管模板。因此,sites.mysite.com/coolsite.com/index.html如果有人點擊coolsite.com我想將其代理到文件夾sites.mysite.com/coolsite.com/index.html而不是 app.syartee .com.Hope 我很清楚

其他伺服器塊:

    # Server for S3
server {
   # Listen on port 80 for all IPs associated with your machine
   listen 80;

   # Catch all other server names
   server_name _; //I want it to handle other domains then app.mysite.com

   # This code gets the host without www. in front and places it inside
   # the $host_without_www variable
   # If someone requests www.coolsite.com, then $host_without_www will have the value coolsite.com
   set $host_without_www $host;
   if ($host ~* www\.(.*)) {
      set $host_without_www $1;

   }

   location / {
       # This code rewrites the original request, and adds the host without www in front
       # E.g. if someone requests
       # /directory/file.ext?param=value
       # from the coolsite.com site the request is rewritten to
       # /coolsite.com/directory/file.ext?param=value
       set $foo 'http://sites.mysite.com';
      # echo "$foo";
       rewrite ^(.*)$ $foo/$host_without_www$1 break;


       # The rewritten request is passed to S3
        proxy_pass http://sites.mysite.com;
        include /etc/nginx/proxy_params;
  }
}

另外我知道我必須在域的cname中進行DNS更改。我想我必須app.mysite.com在模板域名的CNAME下添加?如果錯誤請更正。

感謝您的時間

如果您配置 server_name,nginx 將根據與域匹配的配置塊提供內容。

app.mysite.com

server {
 listen 80;
 server_name  app.mysite.com;

 # config for app.mysite.com

}

其他網站

server {
 listen 80 default_server; #To handle domains apart from the fixed domain(In my case app.mysite.com)
 server_name _ ;

 # config for coolsite.com, anotherdomain.com ...

}

引用自:https://serverfault.com/questions/554501