nginx amb certbot a archlinux

  • warning: tempnam(): open_basedir restriction in effect. File() is not within the allowed path(s): (/srv/www/gilug.org/www/site.tree/) in /srv/www/gilug.org/www/site.tree/public/includes/file.inc on line 802.
  • warning: fopen(): Filename cannot be empty in /srv/www/gilug.org/www/site.tree/public/includes/file.inc on line 803.
  • El fitxer no s'ha pogut crear.

A vegades faig servir el servei de proxy invers a nginx per accedir fàcilment a serveis web que tenim a casa pero des de fora.
Obrir ports seria la manera fàcil de fer-ho, però al obrir ports accedim a serveis web que no tenen per que tenir servei de https.
Fent servir un nginx podem per exemple(1) accedir a un servidor plex a partir d'una direcció web com per exemple https://asco.festuc.info (2) que ens durà a http://localhost:32400
Abans de res hem de configurar via cname o via a una entrada al nostre proveïdor de dns i crear l'entrada que voldrem usar des de internet per accedir al nostre domini.
Jo faig servir un cname que apunta a una nom que te ip dinàmica.
El nom de la ip dinàmica l'agafo de freedns (3).
Un cop tenim el cname al servidor de dns hem d'esperar que la base de dades de domini s'actualitzi (unes poques hores, encara que com a màxim son 24h)
Mentre esperem que el cname apunti cap al nostre router podem aprofitar per obrir els ports 80 (http) i 443 (https) cap al nostre ordinador.
Un cop al ordinador ja podem instalem el nginx el certbot i el asistent:

#pacman -S nginx-mainline certbot certbot-nginx

Un cop instalat podem crear el nom de domini dintre el nginx.conf i un directori on hi haurà la base de la web (que podrà estar buida)
#creo el directori de treball i una petita plana d'inici:

#mkdir /https
#mkdir /https/asco.festuc.info
#mkdir /https/asco.festuc.info/html
echo "asco.festuc.info" > /https/asco.festuc.info/html/index.html

a dintre el arxiu /etc/nginx/nginx.conf hem de crear l'entrada per aquest nom de domini (a més de redirigir el port 80 al port 443)
Aquest es el meu arxiu nginx.conf al principi que encara no tinc el certificat: (poso en # lo que encara no uso)

grep -E -v '^(#|;|$|[ ]*#)' /etc/nginx/nginx.conf
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server{
listen 80 ;
server_name default_server;
return 301 https://$host$request_uri;
}
server {
listen 80;
server_name localhost;
server_name 192.168.1.2;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;

}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ \.php$ {
root /usr/share/nginx/html;
try_files $uri $document_root$fastcgi_script_name =404;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name;
}
}
server{
listen 443 ssl http2; #ssl http2;
ssl on;
# server_name asco.festuc.info;
# ssl_certificate /etc/letsencrypt/live/asco.festuc.info/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/asco.festuc.info/privkey.pem;
proxy_ssl_verify off;
proxy_cache off;
proxy_store off;
location / {
root /https/asco.festuc.info;
index index.html;
# proxy_set_header Host $host;
# proxy_set_header X-Real $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_pass https://localhost:32400;#el port del servidor plex

}
}
}

Despres segueixo :D

1 La entrada fara aixo com exemple
2 Ascó es el poble de flix (de netflix) :P
3 https://freedns.afraid.org/