Субдомен NGINX с proxy_pass
Так что у меня nginx работает как обратный прокси для сервера nextcloud, размещенного на apache в другом виртуальном компьютере. Я хотел бы иметь возможность получить к нему доступ через cloud.domain.com. С моими текущими правилами я должен поместить в cloud.domain.com/nextcloud. Я гуглил, искал, и самым близким, что я получил, была возможность перейти на cloud.domain.com, и он перенаправил бы на cloud.domain.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;
}
}
2 ответа
Хранение /nextcloud
из адресной строки потребует использования if statements
которые , очевидно, злые.
Проблема в том, что вам нужно будет оценить, содержит ли http-запрос /nextcloud
в начале, так как это изменит ваш запрос прокси, потому что сервер Apache требует /nextcloud
быть в ссылке. Также, если вы действительно хотите, чтобы это было удалено из адресной строки, вам также нужно будет проверить ответы, поскольку сервер apache будет содержать ссылки, содержащие /nextcloud
,
Похоже, лучше всего было бы либо перенастроить сервер apache, чтобы он не нуждался в /nextcloud
или просто скажите nginx перенаправить /
в /nextcloud
как вы уже поняли. Это просто для пользователя, так как ему / ей нужно только запомнить домен cloud.domain.com
Проблема здесь не в конфигурации. Проблема заключается в контенте, который предоставляет внутренний сервер 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 .