Start refactoring to be a more modern php app.
This commit is contained in:
parent
fc576fb730
commit
d3271e43a0
77
configs/nginx/folder.conf
Normal file
77
configs/nginx/folder.conf
Normal file
@ -0,0 +1,77 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
|
||||
root /var/www/html;
|
||||
index index.html;
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
|
||||
# Deny access to hidden files
|
||||
location ~ /\. {
|
||||
deny all;
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
}
|
||||
|
||||
# PHP routing - everything under /tkr goes through index.php
|
||||
location /tkr {
|
||||
alias /var/www/html/public;
|
||||
index index.php;
|
||||
|
||||
# index.php is the entry point
|
||||
# It needs to be sent to php-fpm
|
||||
# But if someone tries to directly access index.php, that file will throw a 404
|
||||
# so bots and scanners can't tell this is a php app
|
||||
location = /tkr/index.php {
|
||||
fastcgi_pass php:9000;
|
||||
fastcgi_param SCRIPT_FILENAME /var/www/html/public/index.php;
|
||||
include fastcgi_params;
|
||||
|
||||
# Additional FastCGI params
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
fastcgi_param QUERY_STRING $query_string;
|
||||
}
|
||||
|
||||
# Block attempts to access all other .php files directly
|
||||
# (these are bots and scanners)
|
||||
location ~ ^/tkr/.+\.php$ {
|
||||
return 404;
|
||||
}
|
||||
|
||||
# forward other requests to the fallback block,
|
||||
# which sends them to php-fpm for handling
|
||||
try_files $uri $uri/ @tkr_fallback;
|
||||
}
|
||||
|
||||
# Fallback for /tkr routing - all non-file requests go to index.php
|
||||
location @tkr_fallback {
|
||||
fastcgi_pass php:9000;
|
||||
fastcgi_param SCRIPT_FILENAME /var/www/html/public/index.php;
|
||||
include fastcgi_params;
|
||||
|
||||
# Additional FastCGI params
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
fastcgi_param QUERY_STRING $query_string;
|
||||
}
|
||||
|
||||
# Cache static files
|
||||
# Note that I don't actually serve most of this (just js and css to start)
|
||||
# but including them all will let caching work later if I add images or something
|
||||
location ~* ^/tkr/.+\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
try_files $uri =404;
|
||||
}
|
||||
|
||||
# Deny access to sensitive directories
|
||||
location ~ ^/tkr/(storage|lib|vendor|config) {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
}
|
@ -1,9 +1,22 @@
|
||||
server {
|
||||
listen 80 default_server;
|
||||
#listen 80 default_server;
|
||||
listen 80;
|
||||
root /app/public;
|
||||
|
||||
index index.php index.html index.htm;
|
||||
index index.php;
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
|
||||
# Deny access to hidden files
|
||||
location ~ /\. {
|
||||
deny all;
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass php:9000;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
29
docker-compose.yml
Normal file
29
docker-compose.yml
Normal file
@ -0,0 +1,29 @@
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
container_name: nginx-server
|
||||
ports:
|
||||
- "80:80"
|
||||
volumes:
|
||||
- ./src:/var/www/html
|
||||
- ./configs/nginx/folder.conf:/etc/nginx/conf.d/default.conf
|
||||
depends_on:
|
||||
- php
|
||||
restart: unless-stopped
|
||||
|
||||
php:
|
||||
image: php:8.2-fpm-alpine
|
||||
container_name: php-fpm
|
||||
volumes:
|
||||
- ./src:/var/www/html
|
||||
command: >
|
||||
sh -c "
|
||||
chown -R www-data:www-data /var/www/html/storage &&
|
||||
chmod -R 775 /var/www/html/storage &&
|
||||
php-fpm
|
||||
"
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
src:
|
||||
driver: local
|
@ -1,12 +0,0 @@
|
||||
services:
|
||||
web:
|
||||
image: nginx:latest
|
||||
ports:
|
||||
- "80:80"
|
||||
volumes:
|
||||
- ./tkr-nginx-folder.conf:/etc/nginx/conf.d/default.conf
|
||||
- ./../../tkr:/tkr
|
||||
php:
|
||||
image: php:fpm
|
||||
volumes:
|
||||
- ./../../tkr:/tkr
|
@ -1,29 +0,0 @@
|
||||
server {
|
||||
listen 80 default_server;
|
||||
root /usr/share/nginx/html;
|
||||
|
||||
location ^~ /tkr {
|
||||
index index.php;
|
||||
alias /tkr/public;
|
||||
|
||||
location ~ ^/tkr(/.+\.php)$ {
|
||||
fastcgi_pass php:9000;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME /tkr/public/$1;
|
||||
fastcgi_param SCRIPT_NAME $uri;
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param CONTENT_TYPE $content_type;
|
||||
fastcgi_param CONTENT_LENGTH $content_length;
|
||||
}
|
||||
}
|
||||
|
||||
# Deny anything else
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
# Deny access to hidden or stray files
|
||||
location ~* \.(htaccess|env|ini|log|bak)$ {
|
||||
deny all;
|
||||
}
|
||||
}
|
48
src/public/index.php
Normal file
48
src/public/index.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
// Define your base path (subdirectory)
|
||||
$basePath = '/tkr';
|
||||
|
||||
// Get HTTP data
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
$request = $_SERVER['REQUEST_URI'];
|
||||
|
||||
// Remove the base path from the URL
|
||||
// and strip the trailing slash from the resulting route
|
||||
$path = parse_url($request, PHP_URL_PATH);
|
||||
|
||||
if (strpos($path, $basePath) === 0) {
|
||||
$path = substr($path, strlen($basePath));
|
||||
}
|
||||
|
||||
$path = trim($path, '/');
|
||||
|
||||
function route($pattern, $callback, $methods = ['GET']) {
|
||||
global $path, $method;
|
||||
|
||||
if (!in_array($method, $methods)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Convert route pattern to regex
|
||||
$pattern = preg_replace('/\{([^}]+)\}/', '([^/]+)', $pattern);
|
||||
$pattern = '#^' . $pattern . '$#';
|
||||
|
||||
if (preg_match($pattern, $path, $matches)) {
|
||||
array_shift($matches); // Remove full match
|
||||
call_user_func_array($callback, $matches);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set content type
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
echo "Path: " . $path;
|
||||
|
||||
// Define your routes
|
||||
route('', function() {
|
||||
echo '<h1>Home Page</h1>';
|
||||
echo '<p>Welcome to the home page!</p>';
|
||||
});
|
0
tkr/storage/.gitkeep → src/storage/.gitkeep
Normal file → Executable file
0
tkr/storage/.gitkeep → src/storage/.gitkeep
Normal file → Executable file
Loading…
x
Reference in New Issue
Block a user