Я хочу запускать несколько доменов с одного сервера. Я хотел бы, чтобы nginx сидел перед apache и обслуживал статические файлы. Таким образом, запросы one.com/site_media/logo.png указывают на /var/www/one/site_media/logo.png, а two.com/site_media/logo.png указывают на /var/www/two/site_media/logo.png . Где я ошибаюсь в следующей конфигурации?
ports.conf
NameVirtualHost *:80
Listen 8080
nginx / сайты-доступные / one.com
server {
listen 80;
server_name one.com;
access_log /var/www/one/nginx_access.log;
error_log /var/www/one/nginx_error.log;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Magic-Header "secret";
client_max_body_size 10m;
}
location ^~ /site_media/ {
root /var/www/one;
if ($query_string) {
expires max;
}
}
nginx / сайты-доступные / two.com
server {
listen 80;
server_name two.com;
access_log /var/www/two/nginx_access.log;
error_log /var/www/two/nginx_error.log;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Magic-Header "secret";
client_max_body_size 10m;
}
location ^~ /site_media/ {
root /var/www/two;
if ($query_string) {
expires max;
}
}
apache2 / сайты-доступные / one.com
<VirtualHost *:8080>
ServerName one.com
ServerAlias www.one.com
WSGIScriptAlias / /var/www/one/one.wsgi
ErrorLog /var/www/one/apache_error.log
LogLevel warn
CustomLog /var/www/one/apache_access.log combined
</VirtualHost>
apache2 / сайты-доступные / two.com
<VirtualHost *:8080>
ServerName two.com
ServerAlias www.two.com
WSGIScriptAlias / /var/www/two/two.wsgi
ErrorLog /var/www/one/apache_error.log
LogLevel warn
CustomLog /var/www/one/apache_access.log combined
</VirtualHost>
Запрос на two.com для "/site_media/logo.png" не выполняется, поскольку сервер просматривает / var / www / one / site_media. Я хотел бы сохранить hrefs "/ site_media" для обоих сайтов. Есть ли лучший способ переписать расположение nginx ^ ~ / site_media /? Или что-то другое?
(Edit) Мое обходное решение:
location ^~ /site_media/ {
if ($host = 'one.com') {
root /var/www/one;
}
if ($host = 'two.com') {
root /var/www/two;
}
if ($query_string) {
expires max;
}
Это кажется действительно "хакерским" и не изящным.
Директивы root должны быть на уровне сервера.
server {
listen 80;
server_name one.com;
root /var/www/one;
...
server {
listen 80;
server_name two.com;
root /var/www/two;
...
Также убедитесь, что корень документа в Apache правильно определен для каждого.
Кажется невероятно сложным. Почему бы вам не использовать nginx на всех уровнях? В любом случае, лучший справочник по конфигурациям NGINX, с которыми я столкнулся, по-прежнему: https://calomel.org/nginx.html
Это базовый веб-сервер, работающий на порту 80 (http), обслуживающий веб-страницы. Хотя мы добавили довольно много проверок безопасности, это самый простой сервер, который вы можете получить. На машине AMD64 2 ГГц эта конфигурация легко будет обслуживать тысячи страниц в минуту.