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.
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.
Ö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.
example.com
zugreifen, wird die Seite von example.com
geöffnet.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.
Ö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.
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.
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.
Ü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:
https://www.example.com
--https: // IP-Adresse
http://example.com
http://www.example.com
--http: // IP-Adresse
Vergessen Sie nicht, Nginx zu testen und neu zu starten, damit die Einstellungen wirksam werden.
nginx -t
systemctl restart nginx
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 das Ende.
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.
Recommended Posts