Fix no-match behaviour.

This commit is contained in:
Greyscale 2024-01-08 01:35:15 +01:00
parent dd6d5f808b
commit e8fe7734e6
No known key found for this signature in database
GPG key ID: 74BAFF55434DA4B2
5 changed files with 43 additions and 63 deletions

View file

@ -44,22 +44,21 @@ COPY bouncer.runit /etc/service/bouncer/run
COPY logs-nginx-access.runit /etc/service/logs-nginx-access/run
COPY logs-nginx-error.runit /etc/service/logs-nginx-error/run
RUN chmod +x /etc/service/*/run
COPY NginxDefault /etc/nginx/sites-enabled/default
COPY NginxSSL /etc/nginx/sites-enabled/default-ssl
COPY NginxDefault /etc/nginx/sites-enabled/default.conf
COPY Nginx-tweak.conf /etc/nginx/conf.d/tweak.conf
COPY NginxTemplate.twig /app/
# Disable daemonising in nginx
RUN sed -i '1s;^;daemon off\;\n;' /etc/nginx/nginx.conf
RUN sed -i 's|include /etc/nginx/sites-enabled/*|include /etc/nginx/sites-enabled/*.conf|g' /etc/nginx/nginx.conf
RUN sed -i '1s;^;daemon off\;\n;' /etc/nginx/nginx.conf && \
sed -i 's|include /etc/nginx/sites-enabled/*|include /etc/nginx/sites-enabled/*.conf|g' /etc/nginx/nginx.conf && \
rm /etc/nginx/sites-enabled/default && \
rm -R /etc/nginx/sites-available
COPY bouncer /app
COPY vendor /app/vendor
COPY composer.* /app/
COPY public /app/public
RUN composer install && \
chmod +x /app/bouncer && \
mkdir -p /var/log/bouncer && \
rm /etc/nginx/sites-enabled/default && \
cp /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
mkdir -p /var/log/bouncer
FROM benzine/php:nginx-8.1 as test-app-a
COPY ./test/public-web-a /app/public

View file

@ -1,19 +1,23 @@
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 default_server ssl;
listen [::]:443 default_server ssl;
client_max_body_size 1024M;
root /app/public;
server_name _;
index index.html index.htm;
ssl_certificate /certs/example.crt;
ssl_certificate_key /certs/example.key;
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# deny access to .htaccess files, if Apache's document root

View file

@ -1,30 +0,0 @@
server {
listen 443 ssl;
listen [::]:443 ssl;
client_max_body_size 1024M;
root /app/public;
server_name _;
index index.html index.htm;
ssl_certificate /certs/example.crt;
ssl_certificate_key /certs/example.key;
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}

View file

@ -12,6 +12,7 @@ use GuzzleHttp\Exception\ServerException;
use League\Flysystem\AwsS3V3\AwsS3V3Adapter;
use League\Flysystem\FileAttributes;
use League\Flysystem\Filesystem;
use League\Flysystem\FilesystemException;
use League\Flysystem\Local\LocalFilesystemAdapter;
use Monolog\Handler\StreamHandler;
use Monolog\Level;
@ -307,7 +308,7 @@ class BouncerTarget
{
return sprintf(
'%s://%s%s',
$this->isAllowNonSSL() ? 'http' : 'https',
'https',
$this->getUsername() && $this->getPassword() ?
sprintf('%s:%s@', $this->getUsername(), $this->getPassword()) :
'',
@ -690,6 +691,7 @@ class Bouncer
}, $envs));
sort($envs);
return $envs;
}
@ -924,25 +926,32 @@ class Bouncer
}
/**
* @var BouncerTarget[]
* @param $targets BouncerTarget[]
*/
private function generateNginxConfigs(array $targets): self
private function generateNginxConfigs(array $targets): void
{
// get the length of the longest name...
$longestName = max(array_map(fn (BouncerTarget $target) => strlen($target->getPresentationDomain()), $targets));
$longestPresentationDomain = max(array_map(fn (BouncerTarget $target) => strlen($target->getPresentationDomain()), $targets));
$longestFile = max(array_map(fn (BouncerTarget $target) => strlen($target->getFileName()), $targets));
foreach ($targets as $target) {
$this->generateNginxConfig($target);
if (count($targets) <= $this->getMaximumNginxConfigCreationNotices()) {
$this->logger->info(sprintf(
'%s Created Nginx config for %s',
'%s Created Nginx config for %s <=> %s',
Emoji::pencil(),
str_pad(
$target->getFileName(),
$longestFile,
' ',
STR_PAD_RIGHT
),
str_pad(
$target->getPresentationDomain(),
$longestName,
$longestPresentationDomain,
' ',
STR_PAD_LEFT
)
),
));
}
}
@ -950,27 +959,23 @@ class Bouncer
$this->logger->info(sprintf('%s More than %d Nginx configs generated.. Too many to show them all!', Emoji::pencil(), $this->getMaximumNginxConfigCreationNotices()));
}
$this->logger->info(sprintf('%s Created %d Nginx configs..', Emoji::pencil(), count($targets)));
return $this;
}
private function generateNginxConfig(BouncerTarget $target): self
private function generateNginxConfig(BouncerTarget $target): void
{
$configData = $this->twig->render('NginxTemplate.twig', $target->__toArray());
$this->configFilesystem->write($target->getFileName(), $configData);
if ($target->hasAuth()) {
$this->configFilesystem->write($target->getAuthFileName(), $target->getAuthFileData());
}
return $this;
}
/**
* @param BouncerTarget[] $targets
*
* @return $this
* @throws FilesystemException
*/
private function generateLetsEncryptCerts(array $targets): self
private function generateLetsEncryptCerts(array $targets): void
{
foreach ($targets as $target) {
if (!$target->isLetsEncrypt()) {
@ -1048,8 +1053,6 @@ class Bouncer
}
$this->restartNginx();
return $this;
}
private function restartNginx(): void
@ -1066,12 +1069,10 @@ class Bouncer
$this->logger->debug('Purging existing config files ...');
foreach ($this->configFilesystem->listContents('') as $file) {
/** @var FileAttributes $file */
if ($file->isFile() && $file->path() != 'default' && $file->path() != 'default-ssl') {
if ($file->isFile() && $file->path() != 'default.conf' && $file->path() != 'default-ssl.conf') {
$this->configFilesystem->delete($file->path());
// $this->logger->debug(sprintf(' > %s', $file->path()));
}
}
// $this->logger->debug('Purge complete!');
}
}

View file

@ -1 +1,7 @@
Nothing here.
<html>
<head><title>👻 Nothing to see here!</title></head>
<body>
<h1>Oops!</h1>
<p>There's nothing here.</p>
</body>
</html>