Merge pull request 'Many improvements to the server' (#4) from development into master
All checks were successful
/ docker (push) Successful in 1m50s
All checks were successful
/ docker (push) Successful in 1m50s
Reviewed-on: #4
This commit is contained in:
commit
780ea18f5b
@ -3,27 +3,43 @@ events {
|
|||||||
}
|
}
|
||||||
|
|
||||||
http {
|
http {
|
||||||
access_log /dev/stdout;
|
# Log format
|
||||||
error_log /dev/stdout;
|
log_format main '[$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
|
||||||
|
|
||||||
include mime.types;
|
access_log /dev/stdout main; # Log access to stdout
|
||||||
default_type application/octet-stream;
|
error_log /dev/stdout; # Log errors to stdout
|
||||||
|
|
||||||
sendfile on;
|
include mime.types; # Include the mime types file
|
||||||
tcp_nopush on;
|
default_type application/octet-stream; # Default type
|
||||||
tcp_nodelay on;
|
|
||||||
keepalive_timeout 15;
|
sendfile on; # Send files directly from disk
|
||||||
types_hash_max_size 4096;
|
keepalive_timeout 15; # Keep connections alive for 15 seconds
|
||||||
|
types_hash_max_size 4096; # Max number of mime types
|
||||||
|
|
||||||
|
# TCP optimizations
|
||||||
|
tcp_nopush on; # Send headers in one packet
|
||||||
|
tcp_nodelay on; # Don't wait for packets to be full
|
||||||
|
|
||||||
|
|
||||||
server {
|
server {
|
||||||
server_name _;
|
server_name _; # Listen on all hostnames
|
||||||
listen 80;
|
listen 80; # Listen on port 80
|
||||||
|
|
||||||
root /var/www/html;
|
root /var/www/html; # Serve files from /var/www/html
|
||||||
index index.html index.htm;
|
index index.html index.htm; # Serve index.html and index.htm by default
|
||||||
|
|
||||||
|
# Gzip
|
||||||
|
gzip on;
|
||||||
|
gzip_disable "msie6";
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_proxied any;
|
||||||
|
gzip_comp_level 8;
|
||||||
|
gzip_buffers 16 64k;
|
||||||
|
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
|
||||||
|
|
||||||
client_max_body_size 500M; # Will get replaced by the environment variable MAX_UPLOAD_SIZE
|
client_max_body_size 500M; # Will get replaced by the environment variable MAX_UPLOAD_SIZE
|
||||||
|
|
||||||
|
# Upload endpoint
|
||||||
location /upload.php {
|
location /upload.php {
|
||||||
try_files $uri =404;
|
try_files $uri =404;
|
||||||
|
|
||||||
@ -35,9 +51,15 @@ http {
|
|||||||
include fastcgi_params;
|
include fastcgi_params;
|
||||||
}
|
}
|
||||||
|
|
||||||
location / {
|
# Serve your files
|
||||||
|
location / {
|
||||||
expires 7d;
|
expires 7d;
|
||||||
|
|
||||||
|
open_file_cache max=1000 inactive=60s;
|
||||||
|
open_file_cache_valid 60s;
|
||||||
|
open_file_cache_min_uses 1;
|
||||||
|
open_file_cache_errors on;
|
||||||
|
|
||||||
# Serve the file directly from disk
|
# Serve the file directly from disk
|
||||||
try_files $uri $uri/ =404;
|
try_files $uri $uri/ =404;
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,15 @@ sed -i "s/^post_max_size = .*/post_max_size = ${MAX_UPLOAD_SIZE}/" /etc/php/8.1/
|
|||||||
# Set max upload size for nginx
|
# Set max upload size for nginx
|
||||||
sed -i "s/client_max_body_size 500M;/client_max_body_size ${MAX_UPLOAD_SIZE};/" /etc/nginx/nginx.conf
|
sed -i "s/client_max_body_size 500M;/client_max_body_size ${MAX_UPLOAD_SIZE};/" /etc/nginx/nginx.conf
|
||||||
|
|
||||||
# Start Nginx
|
function start() {
|
||||||
echo "Starting PHP & Nginx"
|
echo "Starting PHP & Nginx"
|
||||||
/etc/init.d/php8.1-fpm start &&
|
/etc/init.d/php8.1-fpm start &&
|
||||||
chmod 777 /run/php/php8.1-fpm.sock &&
|
chmod 777 /run/php/php8.1-fpm.sock &&
|
||||||
nginx -g 'daemon off;'
|
nginx -g 'daemon off;'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Start Nginx and retry if it fails
|
||||||
|
until start; do
|
||||||
|
echo "Nginx failed to start, retrying in 5 seconds..."
|
||||||
|
sleep 5
|
||||||
|
done
|
45
upload.php
45
upload.php
@ -3,6 +3,7 @@
|
|||||||
/**
|
/**
|
||||||
* DO NOT TOUCH!!!!!!!!
|
* DO NOT TOUCH!!!!!!!!
|
||||||
*/
|
*/
|
||||||
|
$SCRIPT_VERSION = "0.1.0"; // The version of the script
|
||||||
$before = microtime(true); // Start time of the script
|
$before = microtime(true); // Start time of the script
|
||||||
$defaultSecretKey = "set me"; // The default secret key
|
$defaultSecretKey = "set me"; // The default secret key
|
||||||
header('Content-type:application/json;charset=utf-8'); // Set the response content type to JSON
|
header('Content-type:application/json;charset=utf-8'); // Set the response content type to JSON
|
||||||
@ -80,19 +81,38 @@ function returnJson($data): void
|
|||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log to nginx
|
||||||
|
*/
|
||||||
|
function logToNginx($message): void
|
||||||
|
{
|
||||||
|
error_log($message);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$secret = $_POST['secret']; // The secret key
|
$secret = isset($_POST['secret']) ? $_POST['secret'] : null; // The secret key
|
||||||
$file = $_FILES['sharex']; // The uploaded file
|
$file = isset($_FILES['sharex']) ? $_FILES['sharex'] : null; // The uploaded file
|
||||||
|
|
||||||
|
// Page to show if someone visits the upload script
|
||||||
|
if ($secret == null && $file == null) {
|
||||||
|
returnJson(array(
|
||||||
|
'status' => 'OK',
|
||||||
|
'url' => 'Welcome to the ShareX PHP Uploader! v' . $SCRIPT_VERSION,
|
||||||
|
// Remove this if you don't want to show the support URL
|
||||||
|
'support' => "For support, visit - https://git.fascinated.cc/Fascinated/sharex-php-uploader",
|
||||||
|
'timeTaken' => getTimeTaken()
|
||||||
|
));
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
// Check if the token is valid
|
// Check if the token is valid
|
||||||
if (!checkSecret($secret)) {
|
if (!checkSecret($secret)) {
|
||||||
returnJson(array(
|
returnJson(array(
|
||||||
'status' => 'ERROR',
|
'status' => 'ERROR',
|
||||||
'url' => 'Invalid or missing upload secret',
|
'url' => 'Invalid or missing upload secret',
|
||||||
// Remove this if you don't want to show the support URL
|
|
||||||
'support' => "For support, visit - https://git.fascinated.cc/Fascinated/sharex-php-uploader",
|
|
||||||
'timeTaken' => getTimeTaken()
|
'timeTaken' => getTimeTaken()
|
||||||
));
|
));
|
||||||
|
logToNginx("An upload was attempted with an invalid secret key: " . $secret);
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,6 +123,7 @@ try {
|
|||||||
'url' => 'You need to set your upload secret in the configuration section of the upload.php file',
|
'url' => 'You need to set your upload secret in the configuration section of the upload.php file',
|
||||||
'timeTaken' => getTimeTaken()
|
'timeTaken' => getTimeTaken()
|
||||||
));
|
));
|
||||||
|
logToNginx("An upload was attempted with the default secret key");
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,23 +134,26 @@ try {
|
|||||||
'url' => 'No file was uploaded',
|
'url' => 'No file was uploaded',
|
||||||
'timeTaken' => getTimeTaken()
|
'timeTaken' => getTimeTaken()
|
||||||
));
|
));
|
||||||
|
logToNginx("An upload was attempted without providing a file");
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
$target_file = preg_replace("/[^A-Za-z0-9_.]/", '', $_FILES["sharex"]["name"]); // Remove unwanted characters
|
$originalFileName = preg_replace("/[^A-Za-z0-9_.]/", '', $_FILES["sharex"]["name"]); // Remove unwanted characters
|
||||||
$fileType = pathinfo($target_file, PATHINFO_EXTENSION); // File extension (e.g. png, jpg, etc.)
|
$fileType = pathinfo($originalFileName, PATHINFO_EXTENSION); // File extension (e.g. png, jpg, etc.)
|
||||||
|
$fileSize = $_FILES["sharex"]["size"]; // File size in bytes
|
||||||
|
|
||||||
// Check if the file already exists
|
// Check if the file already exists
|
||||||
if (file_exists($uploadDir . $target_file)) {
|
if (file_exists($uploadDir . $originalFileName)) {
|
||||||
returnJson(array(
|
returnJson(array(
|
||||||
'status' => 'ERROR',
|
'status' => 'ERROR',
|
||||||
'url' => 'File already exists',
|
'url' => 'File already exists',
|
||||||
'timeTaken' => getTimeTaken()
|
'timeTaken' => getTimeTaken()
|
||||||
));
|
));
|
||||||
|
logToNginx("An upload was attempted with a file that already exists: " . $originalFileName);
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
$finalName = $target_file; // The final name of the file
|
$finalName = $originalFileName; // The final name of the file
|
||||||
if ($useRandomFileNames) { // Generate a random file name if enabled
|
if ($useRandomFileNames) { // Generate a random file name if enabled
|
||||||
$finalName = generateRandomString($fileNameLength) . "." . $fileType;
|
$finalName = generateRandomString($fileNameLength) . "." . $fileType;
|
||||||
}
|
}
|
||||||
@ -155,6 +179,8 @@ try {
|
|||||||
$image->clear();
|
$image->clear();
|
||||||
$image->destroy();
|
$image->destroy();
|
||||||
|
|
||||||
|
$fileSize = filesize($webp_file); // Update the file size
|
||||||
|
|
||||||
// Update the final filename
|
// Update the final filename
|
||||||
$finalName = $webp_file;
|
$finalName = $webp_file;
|
||||||
$needsToBeSaved = false;
|
$needsToBeSaved = false;
|
||||||
@ -169,6 +195,7 @@ try {
|
|||||||
'url' => 'Failed to save file. Check the permissions of the upload directory.',
|
'url' => 'Failed to save file. Check the permissions of the upload directory.',
|
||||||
'timeTaken' => getTimeTaken()
|
'timeTaken' => getTimeTaken()
|
||||||
));
|
));
|
||||||
|
logToNginx("An upload was attempted but the file could not be saved: " . $finalName);
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -177,6 +204,7 @@ try {
|
|||||||
'url' => $finalName,
|
'url' => $finalName,
|
||||||
'timeTaken' => getTimeTaken()
|
'timeTaken' => getTimeTaken()
|
||||||
));
|
));
|
||||||
|
logToNginx("An upload was successful. original id: $originalFileName, final id: $finalName, size: $fileSize");
|
||||||
die();
|
die();
|
||||||
} catch (Exception $e) { // Handle any errors
|
} catch (Exception $e) { // Handle any errors
|
||||||
returnJson(array(
|
returnJson(array(
|
||||||
@ -184,5 +212,6 @@ try {
|
|||||||
'url' => $e->getMessage(),
|
'url' => $e->getMessage(),
|
||||||
'timeTaken' => getTimeTaken()
|
'timeTaken' => getTimeTaken()
|
||||||
));
|
));
|
||||||
|
logToNginx("An upload was attempted but an error occurred: " . $e->getMessage());
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user