Blog

SMB-Server über Reverse Proxy ansprechen

| | permalink

Wenn man einen Samba-Server (Windows-Dateifreigaben) über einen NGINX Reverse Proxy erreichen möchte geht das folgendermaßen:

upstream smb_servers {
    server 192.168.1.101:445;
}

server {
    listen 445; # TCP
    proxy_pass smb_servers;
    error_log  /var/log/nginx/dns.log info;
}

Wenn man einen gespiegelten Dateiserver hat, kann man diesen zusätzlich in einer server-Direktive angeben. Damit könnte man die Last automatisch verteilen.

Achtung: einen SMB-Server über das Internet erreichbar zu machen ist nicht ratsam! Dafür eine VPN-Verbindung verwenden.

Selbstsigniertes Zertifikat automatisch erneuern

| | permalink

Wenn ein Zertifikat abläuft und irgendwelche Sachen nicht mehr funktionieren ist das ziemlich ärgerlich.
Um dies zu verhindern, kann man das Zertifikat automatisiert erneuern.

Get-childitem 'Cert:\LocalMachine\My' | ? {$_.Subject -eq $_.Issuer} | Remove-Item
New-SelfSignedCertificate -DnsName ([System.Net.Dns]::GetHostByName(($env:computerName))).Hostname
Restart-Service -Name [ServiceName]

Dieser PowerShell-Schnipsel entfernt zuerst das Zertifikat unter local machine, erzeugt anschließend ein neues, dass nach dem FQDN des Systems benannt ist und startet dann den betreffenden Windows-Dienst durch.

Zum Automatisieren muss das Ganze in eine geplante Aufgabe gepackt werden. Diese muss mit erhöhten Rechten ausgeführt werden.

AltoRouter

| | permalink

AltoRouter ist eine kleine, aber mächtige PHP-Klasse, mit der man auch große Projekte umsetzen kann.

Um AltoRouter nutzen zu können, muss im Webserver das URL-Rewriting aktiviert sein. Zusätzlich dazu, ist eine .htaccess-Datei notwendig, die die Anfragen an die index.php weiterleitet:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule . index.php [L]
</IfModule>

Die index.php-Datei nimmt die Anfragen entgegen und man kann eigene Routen erstellen, über die die Anfragen abgearbeitet werden:

<?php
header("Content-Type: text/html");
include dirname(__FILE__) . '/AltoRouter.php';

$router = new AltoRouter();
// $router->setBasePath('/');

/* Setup the URL routing. This is production ready. */

$router->map('GET', '/', 'home.php', 'home');
$router->map('GET', '/guest/', 'guest.php', 'guest');
$router->map('GET', '/user/[*:id]/', 'user/id.php', 'user-id');

// // API Routes
// $router->map('GET','/api/[*:key]/[*:name]/', 'json.php', 'api');

/* Match the current request */
$match = $router->match();
if($match) {
  require $match['target'];
} else {
  header("HTTP/1.0 404 Not Found");
  require '404.html';
}
?>

Wenn keine passende Route gefunden wird, wird HTTP Error 404 zurückgegeben und die 404.html-Datei angezeigt.

Eine (ungetestete) vHost-Konfiguration, bei der keine .htaccess notwendig ist:

<VirtualHost *:80>
  ServerName altorouter.local
  DocumentRoot "/var/www/html/altorouter/"
  ServerAdmin apache@altorouter.local
  ErrorLog ${APACHE_LOG_DIR}/altorouter-error.log
  CustomLog ${APACHE_LOG_DIR}/altorouter-access.log combined
  LimitRequestFieldSize 32768
  <Directory /var/www/html/altorouter>
    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule . index.php [L]
    </IfModule>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>