Настройка сервера nginx для обработки запросов от нескольких доменов
Вариант использования:- Я работаю над веб-приложением, которое позволяет создавать шаблоны HTML и публиковать их на amazon 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 является прокси-сервером на порту 80 на экземпляре EC2. На нем также размещается мое приложение, работающее на apache, на порту difnetnet. Таким образом, любой запрос поступает для моего приложения. придет из домена app.mysite.com
и я также хочу прокси размещенные шаблоны на S3, которые находятся внутри ведра говорят sites.mysite.com/coolsite.com/index.html
Так что, если кто-то ударит coolsite.com
Я хочу прокси это в папку sites.mysite.com/coolsite.com/index.html
а не на app.syartee.com. надеюсь мне понятно
Другой блок сервера:
# 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;
}
}
Также я понимаю, что мне придется внести изменения в DNS в имени домена. Я думаю, мне придется добавить app.mysite.com
под CNAME шаблона доменного имени? Пожалуйста, исправьте, если ошиблись.
Спасибо за ваше время
2 ответа
Нашел это как часть документации, но потребовалось время, чтобы понять. Я должен был добавить default_server
атрибут во втором блоке сервера для остальных доменов для работы.
Если мы настроим имя_сервера, 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 ...
}
Я думаю, вам нужно удалить $foo
от
rewrite ^(.*)$ $foo/$host_without_www$1 break;
С фу ты бы сдал
http://sites.mysite.com/coolsite.com/directory/file.ext?param=value
в
proxy_pass http://sites.mysite.com;
Просто предположение