piatachki
@piatachki

Почему происходит редирект на адрес example.com/@custom при попытке закачать файл?

Здравствуйте.

Есть веб-приложение на стеке Java + Spring + Thymeleaf, работает на встроенном томкате. При попытке отправить форму с MultipartFile перекидвыает на страницу example.com/@custom c 404-й ошибкой соответственно.

Код формы:

<form action="/user/change-avatar" method="post" enctype="multipart/form-data">
                            <div class="form-group">
                                <label for="avatar-field">Сменить аватар</label>
                                <div class="input-group">
                                    <input name="file" class="form-control" id="avatar-field" accept="image/jpeg" type="file">
                                    <div class="input-group-append">
                                        <button class="btn btn-secondary" type="submit">Загрузить</button>
                                    </div>
                                </div>
                            </div>
                        </form>


Так как на локальной машине всё работает, подозреваю конфигурацию сервера. На сервере стоят apache и nginx. Приложение работает 8900 порту, апач (насколько я понимаю) проксирует 80 порт на 8900. Конфигурация apache для хоста такая:

<VirtualHost 185.22.***.***:8181>
	ServerName example.com
	ServerAlias www.example.com
	ServerAdmin webmaster@example.com
	DocumentRoot /home/example.com/public_html
	UseCanonicalName Off
	ScriptAlias /cgi-bin/ /home/example.com/public_html/cgi-bin/

	# Custom settings are loaded below this line (if any exist)
	# Include "/usr/local/apache/conf/userdata/example.com/example.com/*.conf

	<IfModule mod_userdir.c>
		UserDir disabled
		UserDir enabled username
	</IfModule>

	<IfModule mod_suexec.c>
		SuexecUserGroup username username
	</IfModule>

	<IfModule mod_suphp.c>
		suPHP_UserGroup username username
		suPHP_ConfigPath /home/username
	</IfModule>

	<Directory "/home/username/public_html">
		AllowOverride All
	</Directory>

    ProxyPreserveHost on
    ProxyPass /.well-known !
    ProxyPass "/" "http://example.com:8900/" nocanon
    ProxyPassReverse "/" "http://example.com:8900"
    AllowEncodedSlashes On

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

</VirtualHost>


Конфигурацию niginx, по совести говоря, не нашел, да и не понимаю, зачем он нужен - очень слаб в этом вопросе. Подскажите, пожалуйста, в какую сторону копать.

UPD: обычные текстовые формы без enctype="multipart/form-data" сабмитятся нормально

UPD 7.07: нашел конфиг nginx, правда вопрос актуальность потерял - перенёс бэк на другой хост без apache|nginx, там чисто томкат работает, ошибка пропала. Но всё равно на будущее было бы интересно

# Virtual host file starts here

server {
listen 185.22.153.66:443;
access_log /var/log/nginx/access.example.com.log;
error_log /var/log/nginx/error.example.com.log;
server_name example.com www.example.com;
root /home/user/public_html;

ssl                  on;
ssl_certificate      /etc/pki/tls/certs/example.com.bundle;
ssl_certificate_key  /etc/pki/tls/private/example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
ssl_prefer_server_ciphers   on;

ssl_session_cache   shared:SSL:20m;
ssl_session_timeout 60m;

add_header Strict-Transport-Security "max-age=31536000";
add_header X-Content-Type-Options nosniff;

location / {
location ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|woff|ttf|svg|eot|sh)\$ {
expires 7d; #Comment this out if you are using the apache backend cache-control/expires headers.
try_files \$uri \@backend;
}
error_page 405 = \@backend;
error_page 500 = \@custom;
add_header X-Cache "HIT from Backend";
proxy_pass http://185.22.***.***:8181;
include proxy.inc;
}
location \@backend {
internal;
proxy_pass http://185.22.***.***:8181;
include proxy.inc;
}
location \@custom {
internal;
proxy_pass http://185.22.***.***:8181;
include proxy.inc;
}
location ~ .*\.(php|jsp|cgi|pl|py)?\$ {
proxy_pass http://185.22.***.***:8181;
include proxy.inc;
}
location ~ /\.ht {
deny all;
}
}

# Virtual host file ends here
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 1
zxscv
@zxscv
Так как у тебя апач на фронте, тебе по любому надо искать в nginx конфиге, но скорее всего где то в скрипте. Но вообще странная конфигурация апач на фронте а nginx в бекенде
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы