У меня есть сайт Meteor 1.6 на капле DigitalOcean Ubuntu 16.04, развернутой с использованием Phusion Passenger и Nginx.
Я настроил ssl на моем сервере.
http://mysite перенаправляет на https://mysite и сайт работает нормально.
Однако http://www.mysite перенаправляет на https://mysite, и все, что отображается, это страница Nginx по умолчанию "Welcome to nginx!".
Я следовал инструкциям и пробовал что-то из других сообщений на форуме, и я не могу найти, что не так с моей настройкой.
DNS-записи с панели управления DigitalOcean:
A www.mysite.org directs to xxx.xx.xx.xx 3600
A mysite.org directs to xxx.xx.xx.xx 1800
Затем я настроил ssl, используя Certbot и LetsEncrypt, следуя этому руководству:
https://www.digitalocean.com/community/tutorials/how-to-set-up-let-s-encrypt-with-nginx-server-blocks-on-ubuntu-16-04
И я добавил серверный блок для перенаправления www в обычный домен, следуя этому руководству:
https://www.digitalocean.com/community/tutorials/how-to-redirect-www-to-non-www-with-nginx-on-ubuntu-14-04
Вот мой конфиг nginx:
sudo nano /etc/nginx/sites-enabled/mysite.conf
server {
server_name mysite.org www.mysite.org;
...Meteor app config
# added by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mysite.org/fullchain.pem$
ssl_certificate_key /etc/letsencrypt/live/mysite.org/privkey.p$
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
# added by me
server {
server_name www.mysite.org;
return 301 $scheme://mysite.org$request_uri;
}
# added by Certbot
server {
if ($host = mysite.org) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name mysite.org;
return 404; # managed by Certbot
}
Я попытался добавить это в свой блок перенаправления сервера, но это не имело значения:
listen 80;
listen 443 ssl;
Есть какие-нибудь идеи, как я могу получить перенаправление www.mysite -> mysite на работу? Спасибо!
Обновление: я попробовал ответ flaixman в другом приложении, приложение Django в другой капле, и это сработало. Но я все еще не могу получить перенаправление на работу в моем приложении Meteor. На обоих сайтах записи A и CNAME настроены одинаково.
Вот мой конфиг Meteor, основанный на ответе flaixman:
server {
listen 80;
server_name example.org www.example.org;
return 301 https://example.org$request_uri;
}
server {
listen 443 ssl http2; #https of www*, 301 to right domain.
server_name www.example.org;
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
return 301 https://example.org$request_uri;
}
server {
listen 443 ssl http2;
server_name example.org;
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/example/bundle/public;
# Turn on Passenger
passenger_enabled on;
# Tell Passenger that your app is a Meteor app
passenger_app_type node;
passenger_startup_file main.js;
# Tell your app where MongoDB is
passenger_env_var MONGO_URL mongodb://localhost:27017/example;
passenger_env_var MONGO_OPLOG_URL mongodb://localhost:27017/local;
# Tell your app what its root URL is
passenger_env_var ROOT_URL http://example.org;
}
В моем журнале ошибок nginx /var/log/nginx/error.log я вижу это сообщение:
2019/01/17 17:30:52 [warn] 7786#7786: conflicting server name "www.example.org" on 0.0.0.0:80, ignored
2019/01/17 17:30:52 [warn] 7786#7786: conflicting server name "www.example.org" on 0.0.0.0:443, ignored
2019/01/17 17:30:52 [warn] 7789#7789: conflicting server name "www.example.org" on 0.0.0.0:80, ignored
2019/01/17 17:30:52 [warn] 7789#7789: conflicting server name "www.example.org" on 0.0.0.0:443, ignored
Я ожидаю, что это будет означать, что у меня есть дублирующая директива прослушивания в моем файле настроек, но я не вижу ничего? Я проверил с помощью ls -a, и в папке нет второй копии файла conf.
Ошибка может быть связана с ошибкой перенаправления, но я не вижу, что является причиной ошибки?
Снова отредактируйте: я наконец нашел дубликаты директив прослушивания в / etc / nginx / sites-available / default. Не уверен, что Certbot вставил их или я сам поставил их туда, когда я настраивал сервер ... в любом случае, комментирование их, похоже, решило проблему. Возможно, что-то в инструкциях Phusion Passenger по настройке серверных блоков конфликтует с инструкциями LetsEncrypt? В любом случае, yay для журнала ошибок nginx!