Если коротко, то да - нужно открыть порт 3000.
Если длинно, то я в таких случаях поднимаю на сервере nginx
на 80-м и 443-м портах, и делаю внутри редиректы и обратную прокси.
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
этот блок велит серверу все HTTP-запросы перенаправлять на HTTPS.
Доступ к вашему react
серверу через фичу, которая называется обратная прокси:
server {
listen 443 ssl;
server_name your.server.domain;
add_header Access-Control-Allow-Origin *;
location / {
proxy_pass http://localhost:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
ssl_certificate /etc/letsencrypt/live/your.server.domain/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/your.server.domain/privkey.pem; # managed by Certbot
}
Здесь единственная тонкость - перед тем, как получить сертификаты у Let's Encrypt, нужно подпихнуть nginx-у какие-то сертификат и ключ, чтобы https
завёлся. Без ключа и сертификата nginx
отказывается запускаться. У меня всегда есть в загашнике ключики и сертификаты от других сайтов, но вы можете для себя сгенерировать самоподписной сертификат.
$ openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj '/CN=your.server.domain'
$ openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt
В результате domain.crt
- самоподписной сертификат, domain.key
- соответствующий приватный ключ. Укажите их в ssl_certificate
и ssl_certificate_key
, а затем запустите nginx
.
После того, как nginx
стартовал, вам нужно будет получить сертификат.
Я всегда пользуюсь бесплатными сертификами от Let's Encrypt
, получаю их через certbot
:
$ certbot --nginx -d your.server.domain
В результате профит: по адресу https://your.server.domain/ находится ваше приложение.