Wenden Sie Ihre eigene Domain auf Rails of VPS an und machen Sie sie zu SSL (https) (CentOS 8.2 / Nginx).

Darüber hinaus arbeite ich kontinuierlich an den folgenden Artikeln, die zuletzt veröffentlicht wurden. Da jedoch keine direkte Verbindung zum vorherigen Artikel besteht, ist es in Ordnung, nur die Arbeit dieses Artikels unabhängig auszuführen.

"Bereitstellung auf ConoHa VPS (CentOS 8.2) mit Rails 6 + PostgreSQL + Nginx + Unicorn + Capistrano"

Das Folgende ist der sofortige Start.


Es basiert auf der Umgebung von CentOS (8.2) und Nginx. Zu Beginn der Arbeit wird davon ausgegangen, dass die Rails-Anwendung angezeigt wird, wenn Sie "http: // IP address" eingeben.

Außerdem gehe ich davon aus, dass Sie bereits eine eigene Domain bei Name.com erworben haben (obwohl es keine Rolle spielt, von welchem Registrar Sie erworben haben).

Befolgen Sie nun die folgenden Schritte.

1. 1. Wenden Sie Ihre eigene Domain an

1-1. Ändern Sie die DNS-Einstellungen Ihres Namens dot com

Fügen Sie die folgenden zwei Elemente auf der Seite mit den DNS-Eintragseinstellungen von Name.com hinzu. Als Beispiel wird die Domain auf "example.com" gesetzt.

Hostname TYPE TTL VALUE
example.com A 3600 Server-IP-Adresse (xxx.xxx.xxx.xxx)
www.example.com CNAME 3600 example.com

Nach der Implementierung der obigen Schritte sollten die Datensatzeinstellungen wie folgt sein.

Hostname TYPE TTL VALUE
example.com NS 86400 01.dnsv.jp
example.com NS 86400 02.dnsv.jp
example.com NS 86400 03.dnsv.jp
example.com NS 86400 04.dnsv.jp
example.com A 3600 Server-IP-Adresse (xxx.xxx.xxx.xxx)
www.example.com CNAME 3600 example.com

Sobald die Einstellungen übernommen werden, ändert sich beim Zugriff auf "example.com" und "www.example.com" der Zugriff auf den Server.

Wenn ich jedoch versuche, in diesem Zustand auf "example.com" zuzugreifen, wird die Nginx-Seite angezeigt. Sie müssen auch die Nignx-Einstellungen ändern.

Hostname TYPE TTL VALUE
example.com A 3600 Server-IP-Adresse (xxx.xxx.xxx.xxx)
www.example.com CNAME 3600 example.com

Was das oben genannte bedeutet

Mit anderen Worten, Sie greifen auf "xxx.xxx.xxx.xxx" zu, unabhängig davon, welche Sie eingeben.

Hier ohne Verwendung der Einstellung CNAME (Alias)

Hostname TYPE TTL VALUE
example.com A 3600 Server-IP-Adresse (xxx.xxx.xxx.xxx)
www.example.com A 3600 Server-IP-Adresse (xxx.xxx.xxx.xxx)

Die Bewegung ist genau die gleiche wie oben, aber aus Gründen der Bedeutung ist es besser, mit CNAME zu setzen.

1-2. Ändern Sie die Nginx-Einstellungen

Öffnen Sie die folgende Konfigurationsdatei, nachdem Sie eine Verbindung zum Server hergestellt und zum Root-Benutzer gewechselt haben.

vim /etc/nginx/conf.d/Anwendungsname.conf

Es sollte wie unten aussehen.

nginx:/etc/nginx/conf.d/Anwendungsname.conf


upstream unicorn_Anwendungsname{
  server unix:/var/www/Anwendungsname/current/tmp/sockets/unicorn.sock;
}
server {
  listen 80;
  server_Name Server IP-Adresse;
  root /var/www/Anwendungsname/current/public;
  access_log /var/log/nginx/Anwendungsname_access.log;
  error_log /var/log/nginx/Anwendungsname_error.log;
  location / {
    try_files $uri @unicorn;
  }
  location @unicorn {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://unicorn_Anwendungsname;
  }
}

Ändern Sie die IP-Adresse von Servername oben in "example.com", wie unten gezeigt.

nginx:/etc/nginx/conf.d/Anwendungsname.conf


server_name example.com;

Testen Sie nach der Änderung, ob ein Problem mit der Einstellungsdatei vorliegt.

nginx -t

Wenn alles gut geht, starten Sie Nginx neu.

systemctl restart nginx

Wenn Sie danach auf "http: // example.com" zugreifen, wird die Seite der Anwendung angezeigt.

Wenn Sie hier mit "http: // IP address" zugreifen, wurde die Anwendung zuvor angezeigt, jetzt wird jedoch die Nginx-Seite angezeigt. Dies ist das Ergebnis des Umschreibens der vorherigen Einstellungsdatei und des Entfernens der Beschreibung der IP-Adresse.

Ändern Sie die Nginx-Konfigurationsdatei erneut, um das folgende Verhalten zu erzielen.

Mit anderen Worten, die Bewegung, alles auf "example.com" zu verlagern (ohne www).

Öffnen Sie die Datei erneut

vim /etc/nginx/conf.d/Anwendungsname.conf

Aktualisieren Sie den Serverteil der Einstellungsdatei wie folgt.

nginx:/etc/nginx/conf.d/Anwendungsname.conf


server {
  listen 80;
  server_name example.com;
  root /var/www/Anwendungsname/current/public;
  access_log /var/log/nginx/Anwendungsname_access.log;
  error_log /var/log/nginx/Anwendungsname_error.log;
  location / {
    try_files $uri @unicorn;
  }
  location @unicorn {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://unicorn_Anwendungsname;
  }
}
server {
  listen 80;
  server_name www.example.IP-Adresse des COM-Servers;
  return 301 http://example.com$request_uri;
}

Fügen Sie eine weitere Beschreibung des Servers hinzu, fügen Sie "www.example.com" und die "IP-Adresse des Servers" zu "Servername" hinzu (fügen Sie einen halben Abstand dazwischen ein) und "Beispiel". Auf com` gerichtet.

$request_uriというのはその時のページを指している変数で、例えば、www.example.com/blogsにアクセスしたら、example.com/blogsにリダイレクトしている。

Vergessen Sie nach der Änderung nicht, die Einstellungen zu testen und Nginx neu zu starten, wenn kein Problem vorliegt.

nginx -t
systemctl restart nginx

Damit sind die Einstellungen abgeschlossen, um den Zugriff nach Domänen zu ermöglichen.

2. In SSL konvertieren (https)

2-1. Https-Verbindung zulassen (offener Port 443)

Öffnen Sie Port 443, um https zuzulassen.

Lassen Sie uns zunächst den Einstellungsstatus von firewalld überprüfen.

firewall-cmd --list-all

Überprüfen Sie diese Dienste: Cockpit dhcpv6-client http ssh. http und ssh sind erlaubt.

Mach Folgendes:

firewall-cmd --add-service=https --permanent

Laden Sie firewalld neu, um die Einstellungen wiederzugeben.

firewall-cmd --reload

Führen Sie erneut aus, um die Änderung zu bestätigen.

firewall-cmd --list-all

Dienste: Cockpit DHCPV6-Client http https ssh und https wurde hinzugefügt.

2-2. Installieren Sie Certbot

Certbot ist ein Tool, das automatisch alles vom SSL-Zertifikat bis zur Einstellung mit Let’s Encrypt ausführt.

Installieren Sie Certbot und die Plugins, die für die Verwendung von Certbot mit Nginx erforderlich sind.

dnf -y install certbot python3-certbot-nginx

Überprüfen Sie, ob es installiert wurde.

certbot --version

Wenn certbot 1.7.0 angezeigt wird, ist es OK.

2-3. Beziehen Sie das SSL-Zertifikat und legen Sie es fest

Verwenden Sie Certbot, um das SSL-Zertifikat abzurufen und festzulegen.

certbot --nginx

Sie werden interaktiv Fragen zu den Einstellungen gestellt, beantworten Sie diese also. Nachfolgend finden Sie alle Fragen und Beispiele für Antworten.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): [email protected] #Geben sie ihre E-Mailadresse ein

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: (A)gree/(C)ancel: A #Wählen Sie A (Zustimmen)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N #Wählen Sie N (Nein)

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1 # exmaple.Konvertieren Sie jp in HTTPS
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/Anwendungsname.conf
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/Anwendungsname.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-XX-XX. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Bestätigen Sie, dass das Zertifikat erhalten und festgelegt wurde. Mach Folgendes:

certbot certificates

Wenn die Zertifikatinformationen der Domain example.com angezeigt werden, ist dies in Ordnung.

Sie können jetzt eine Verbindung über HTTPS herstellen. Stellen Sie sicher, dass Sie unter "https: // example.com" darauf zugreifen können.

Darüber hinaus beträgt das Ablaufdatum des Zertifikats 3 Monate. Wenn es also unverändert bleibt, läuft es nach 3 Monaten ab. Fügen Sie einen Job für Coulomb hinzu und machen Sie ihn praktisch dauerhaft, indem Sie das Zertifikat regelmäßig automatisch erneuern. Mach Folgendes:

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

Geben Sie den Inhalt der Datei aus, um zu bestätigen, dass Coulomb eingestellt wurde.

cat /etc/crontab

Bestätigen Sie, dass am Ende des Ausgabeergebnisses "0 0,12 * * * root python3 -c'import random; import time; time.sleep (random.random () * 3600) '&& certbot erneuern -q" steht.

Starten Sie den Coulomb-Daemon neu, um die Einstellungen widerzuspiegeln.

systemctl restart crond

Versuchen Sie abschließend einen Trockenlauf (= Test) zur Bestätigung.

certbot renew --dry-run

Wenn das Ergebnis lautet "Herzlichen Glückwunsch, alle Erneuerungen waren erfolgreich.", Ist es in Ordnung.

2-4. Ändern Sie die Nginx-Einstellungen

Überprüfen Sie nun die Nginx-Konfigurationsdatei.

vim /etc/nginx/conf.d/Anwendungsname.conf

Anschließend können Sie bestätigen, dass sich der Serverteil des Inhalts automatisch geändert hat. Dies liegt daran, dass Certbot es aktualisiert hat. Das Folgende ist ein Beispiel nach der Aktualisierung.

nginx:/etc/nginx/conf.d/Anwendungsname.conf


server {
  server_name example.com;
  root /var/www/Anwendungsname/current/public;
  access_log /var/log/nginx/Anwendungsname_access.log;
  error_log /var/log/nginx/Anwendungsname_error.log;
  location / {
    try_files $uri @unicorn;
  }
  location @unicorn {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://unicorn_Anwendungsname;
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/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

}
server {
  listen 80;
  server_name www.example.IP-Adresse des COM-Servers;
  return 301 https://example.com$request_uri;
}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


  listen 80;
  server_name example.com;
    return 404; # managed by Certbot


}

Wenn das Obige jedoch unverändert bleibt, kann es möglicherweise nicht umgeleitet werden, wenn auf das Verzeichnis mit "https: // www.example.com" oder "https: // IP-Adresse" zugegriffen wird, oder Sie möchten die Einrückungs- und Beschreibungsposition möglicherweise ordentlich anordnen. Daher wurde es in die folgende Form umgestaltet.

Darüber hinaus haben das Schreiben von "listen 443 ssl;" in einer Zeile und das Schreiben von "listen 443;" "ssl on;" in zwei Zeilen dieselbe Bedeutung.

nginx:/etc/nginx/conf.d/Anwendungsname.conf


server {
  listen 443;
  ssl on;
  server_name example.com;
  root /var/www/Anwendungsname/current/public;
  access_log /var/log/nginx/Anwendungsname_access.log;
  error_log /var/log/nginx/Anwendungsname_error.log;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/example.com/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
  location / {
    try_files $uri @unicorn;
  }
  location @unicorn {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://unicorn_Anwendungsname;
  }
}
server {
  listen 443;
  server_name www.example.IP-Adresse des COM-Servers;
  return 301 https://example.com$request_uri;
}
server {
  listen 80;
  server_name example.com www.example.IP-Adresse des COM-Servers;
  return 301 https://example.com$request_uri;
}

Jetzt werden Sie in allen folgenden Fällen zu "https: // example.com" umgeleitet:

Vergessen Sie nicht, Nginx zu testen und neu zu starten, damit die Einstellungen wirksam werden.

nginx -t
systemctl restart nginx

3. 3. Referenz

Rails config / environment / Production.rb bietet folgende Optionen:

config/environments/production.rb


# config.force_ssl = true

Standardmäßig sollte es wie oben auskommentiert werden.

Wenn Sie diese Option auskommentieren und aktivieren, können Sie zu https umleiten, wenn auf die App über http zugegriffen wird. Mit anderen Worten, dasselbe, was in Nginx eingestellt werden kann, kann erreicht werden.

Ich denke jedoch, dass diese Verarbeitung ursprünglich vom Webserver (Nginx) ausgeführt wird. Wenn Sie also einen Webserver wie dieses Mal verwenden, verwenden Sie die oben genannte Rails-Funktion nicht und behandeln Sie sie auf der Webserverseite. Behalte es.

das ist alles

Das ist das Ende.

Ergänzung

Vielen Dank für das Lesen des Artikels.

Ich werde unten einen Link zum ursprünglichen Blog-Artikel einfügen, aber da der Inhalt mit diesem Artikel identisch ist, müssen Sie nicht darauf verweisen, sondern es handelt sich um einen Artikel über Qiita, da er über die Syntax-Hervorhebungsfunktion von Qiita verfügt Es sollte leichter zu verstehen sein, wenn Sie lesen.

knmts.com | Wenden Sie Ihre eigene Domain auf Rails of VPS an und machen Sie sie zu SSL (https) (CentOS 8.2 / Nginx)

Recommended Posts

Wenden Sie Ihre eigene Domain auf Rails of VPS an und machen Sie sie zu SSL (https) (CentOS 8.2 / Nginx).
Wenn Sie Rails noch nicht kennen und Ihre eigene Validierung vornehmen möchten, halten Sie an diesem Finger an.
Verwenden Sie Heroku × Rails, um mit Rack-Rewrite zu Ihrer eigenen Domain umzuleiten
So machen Sie https zum Schema der URL, die vom URL-Helfer von Rails generiert wurde
Schützen Sie mit Cloud-Funktionen erstellte REST-APIs mit Firebase-Authentifizierung. Wenden Sie die Firebase-Authentifizierung auf die API Ihres eigenen REST-Servers an.