Apache-2.2
配置 nginx 伺服器以處理來自多個域的請求
案例:-我正在開發一個 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 ... }