Поддомен NGINX с proxy_pass

У меня nginx работает как обратный прокси для сервера nextcloud, размещенного на apache на другой виртуальной машине. Я бы хотел получить к нему доступ через cloud.example.com. С моими текущими правилами я должен поместить в cloud.example.com/nextcloud. Я искал в Google, и самое близкое, что у меня было, это возможность перейти на cloud.example.com, и он будет перенаправлен на cloud.example.com/nextcloud, но я бы хотел, чтобы / nextcloud не попадал в адресную строку если возможно. Нужно ли мне иметь местоположение / nextcloud, через которое проходит прокси, в дополнение к /?

Это мой текущий nginx.conf:

server {
    listen       443 ssl http2 default_server;
    server_name  _;
    ssl_certificate /etc/letsencrypt/live/cloud.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.domain.com/privkey.pem;
    ssl_stapling on;
    ssl_stapling_verify on;

    location /.well-known {
        alias /var/www/.well-known;
    }
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-By $server_addr:$server_port;
        proxy_set_header Host $http_host;
        proxy_pass http://10.37.70.6:8080;
    }

}
1
задан 15 July 2019 в 06:17
2 ответа

удаление / nextcloud из адресной строки потребует использования if операторов , которые явно злы .

Проблема в том, что вам нужно будет оценить, содержит ли HTTP-запрос вначале / nextcloud , так как это изменит ваш прокси-запрос, потому что сервер apache требует / nextcloud быть в URL. Кроме того, если вы действительно хотите удалить это из адресной строки, вам также придется проверить ответы, так как сервер apache будет включать ссылки, содержащие / nextcloud .

Похоже, лучше всего будет либо перенастройте сервер apache так, чтобы он не нуждался в / nextcloud , или просто скажите nginx перенаправить / на / nextcloud , как вы уже поняли. Это просто для пользователя, поскольку ему / ей нужно только запомнить домен cloud.domain.com

0
ответ дан 4 December 2019 в 05:16

Проблема не в конфигурации. Проблема заключается в содержимом, которое предоставляет внутренний сервер Apache. Ссылки и ссылки на ресурсы содержат путь /nextcloud/. Это необходимо заменить перед представлением контента пользователю/клиенту. Это не всегда надежное решение:

    location / {
            sub_filter '/nextcloud/' '/';
            sub_filter_once off;

            proxy_pass http://10.37.70.6:8080/nextcloud/;
    }
    location /nextcloud/ {
            rewrite ^/nextcloud(/.*)$ $1 redirect;
    }

Для этого требуется ngx_http_sub_module.

0
ответ дан 12 December 2020 в 09:59

Теги

Похожие вопросы