Мой сайт использует Mezzanine 4.2.3 с Django-Oscar 1.5.2 и Django 1.10.8, работающими на Ubuntu 16.04 на Digitalocean.Когда я использую контактную форму Mezzanine на демонстрационной странице, созданной с помощью createdb
, и с моего собственного компьютера, она успешно отправляет электронные письма.Но когда я тестирую его на моей дроплете Digitalocean под управлением Ubuntu 16.04, я получаю неверный шлюз 502.
Журнал ошибок nginx записывает эту ошибку: *13 upstream prematurely closed connection while reading response header from upstream, client: [an IP I can't identify], server: [my website url], request: "POST /contact/ HTTP/1.1", upstream: "http://unix:/home/my-django-app/my-django-app.sock:/contact/", host: "[my website url]", referrer: "[my website url]/contact/"
.Число варьируется между *1
, *7
и *13
, но текст тот же.
Я гуглил это и нашел различные возможные решения:
Увеличение времени ожидания для nginx proxy_pass .Это включало добавление proxy_connect_timeout 75s;
и proxy_read_timeout 300s;
в конфигурацию nginx, а затем добавление --timeout 300
в gunicorn.Это привело к фактической ошибке времени ожидания: *21 upstream timed out (110: Connection timed out) while reading response header from upstream,
Раскомментирование precedence ::ffff:0:0/96 100
в /etc/gai.conf..
Разрешить порт 587 в UFW.Это не должно иметь значения, потому что если я использую gmail, то это должен быть порт на стороне Google, не так ли?Я делаю это только потому, что вижу различные решения (наиболее неразрешенные), говорящие о необходимости разблокировать этот порт.
Заставить nginx прослушивать порт 587: server {listen 80; listen 587; ... list 443 ssl; ...}
.
При прослушивании nginx через порт 587 sudo netstat -tulnp | grep 587
показывает:
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 12815/nginx -g daem
Мои настройки электронной почты выглядят нормально:
EMAIL_USE_TLS = True
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "!#%%&&*%^#$^*%@gmail.com"
EMAIL_HOST_PASSWORD = "^*#^@#$%&@$%%#$"
EMAIL_PORT = 587
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
Я пробовал SSL с портом465 тоже.Он работал с моей локальной копией, но не на сервере.То же сообщение об ошибке 502.
Я думаю, что «upstream» означает gunicorn, поэтому я установил для него журнал ошибок, но все, что он записывал, были коды состояния 200 и 302 при загрузке страницы.Ничего не регистрировалось, когда произошло 502.
У меня нет идей.Чего мне не хватает?
Обновление 3 июня 2018 года:
$ telnet smtp.gmail.com 587
Trying 108.177.96.109...
Trying 108.177.96.108...
Trying 2a00:1450:4013:c01::6c...
telnet: Unable to connect to remote host: Network is unreachable
Пробовал это тоже с 465 и 25.Означает ли это, что Digitalocean блокирует соединение?Есть прецедент .