Many improvements to the server #4
@ -3,27 +3,43 @@ events {
|
||||
}
|
||||
|
||||
http {
|
||||
access_log /dev/stdout;
|
||||
error_log /dev/stdout;
|
||||
# Log format
|
||||
log_format main '[$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
|
||||
|
||||
include mime.types;
|
||||
default_type application/octet-stream;
|
||||
access_log /dev/stdout main; # Log access to stdout
|
||||
error_log /dev/stdout; # Log errors to stdout
|
||||
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
tcp_nodelay on;
|
||||
keepalive_timeout 15;
|
||||
types_hash_max_size 4096;
|
||||
include mime.types; # Include the mime types file
|
||||
default_type application/octet-stream; # Default type
|
||||
|
||||
sendfile on; # Send files directly from disk
|
||||
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_name _;
|
||||
listen 80;
|
||||
server_name _; # Listen on all hostnames
|
||||
listen 80; # Listen on port 80
|
||||
|
||||
root /var/www/html;
|
||||
index index.html index.htm;
|
||||
root /var/www/html; # Serve files from /var/www/html
|
||||
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
|
||||
|
||||
# Upload endpoint
|
||||
location /upload.php {
|
||||
try_files $uri =404;
|
||||
|
||||
@ -35,9 +51,15 @@ http {
|
||||
include fastcgi_params;
|
||||
}
|
||||
|
||||
location / {
|
||||
# Serve your files
|
||||
location / {
|
||||
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
|
||||
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
|
||||
sed -i "s/client_max_body_size 500M;/client_max_body_size ${MAX_UPLOAD_SIZE};/" /etc/nginx/nginx.conf
|
||||
|
||||
# Start Nginx
|
||||
echo "Starting PHP & Nginx"
|
||||
/etc/init.d/php8.1-fpm start &&
|
||||
chmod 777 /run/php/php8.1-fpm.sock &&
|
||||
nginx -g 'daemon off;'
|
||||
function start() {
|
||||
echo "Starting PHP & Nginx"
|
||||
/etc/init.d/php8.1-fpm start &&
|
||||
chmod 777 /run/php/php8.1-fpm.sock &&
|
||||
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!!!!!!!!
|
||||
*/
|
||||
$SCRIPT_VERSION = "0.1.0"; // The version of the script
|
||||
$before = microtime(true); // Start time of the script
|
||||
$defaultSecretKey = "set me"; // The default secret key
|
||||
header('Content-type:application/json;charset=utf-8'); // Set the response content type to JSON
|
||||
@ -80,19 +81,38 @@ function returnJson($data): void
|
||||
die();
|
||||
}
|
||||
|
||||
/**
|
||||
* Log to nginx
|
||||
*/
|
||||
function logToNginx($message): void
|
||||
{
|
||||
error_log($message);
|
||||
}
|
||||
|
||||
try {
|
||||
$secret = $_POST['secret']; // The secret key
|
||||
$file = $_FILES['sharex']; // The uploaded file
|
||||
$secret = isset($_POST['secret']) ? $_POST['secret'] : null; // The secret key
|
||||
$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
|
||||
if (!checkSecret($secret)) {
|
||||
returnJson(array(
|
||||
'status' => 'ERROR',
|
||||
'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()
|
||||
));
|
||||
logToNginx("An upload was attempted with an invalid secret key: " . $secret);
|
||||
die();
|
||||
}
|
||||
|
||||
@ -103,6 +123,7 @@ try {
|
||||
'url' => 'You need to set your upload secret in the configuration section of the upload.php file',
|
||||
'timeTaken' => getTimeTaken()
|
||||
));
|
||||
logToNginx("An upload was attempted with the default secret key");
|
||||
die();
|
||||
}
|
||||
|
||||
@ -113,23 +134,26 @@ try {
|
||||
'url' => 'No file was uploaded',
|
||||
'timeTaken' => getTimeTaken()
|
||||
));
|
||||
logToNginx("An upload was attempted without providing a file");
|
||||
die();
|
||||
}
|
||||
|
||||
$target_file = 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.)
|
||||
$originalFileName = preg_replace("/[^A-Za-z0-9_.]/", '', $_FILES["sharex"]["name"]); // Remove unwanted characters
|
||||
$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
|
||||
if (file_exists($uploadDir . $target_file)) {
|
||||
if (file_exists($uploadDir . $originalFileName)) {
|
||||
returnJson(array(
|
||||
'status' => 'ERROR',
|
||||
'url' => 'File already exists',
|
||||
'timeTaken' => getTimeTaken()
|
||||
));
|
||||
logToNginx("An upload was attempted with a file that already exists: " . $originalFileName);
|
||||
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
|
||||
$finalName = generateRandomString($fileNameLength) . "." . $fileType;
|
||||
}
|
||||
@ -155,6 +179,8 @@ try {
|
||||
$image->clear();
|
||||
$image->destroy();
|
||||
|
||||
$fileSize = filesize($webp_file); // Update the file size
|
||||
|
||||
// Update the final filename
|
||||
$finalName = $webp_file;
|
||||
$needsToBeSaved = false;
|
||||
@ -169,6 +195,7 @@ try {
|
||||
'url' => 'Failed to save file. Check the permissions of the upload directory.',
|
||||
'timeTaken' => getTimeTaken()
|
||||
));
|
||||
logToNginx("An upload was attempted but the file could not be saved: " . $finalName);
|
||||
die();
|
||||
}
|
||||
}
|
||||
@ -177,6 +204,7 @@ try {
|
||||
'url' => $finalName,
|
||||
'timeTaken' => getTimeTaken()
|
||||
));
|
||||
logToNginx("An upload was successful. original id: $originalFileName, final id: $finalName, size: $fileSize");
|
||||
die();
|
||||
} catch (Exception $e) { // Handle any errors
|
||||
returnJson(array(
|
||||
@ -184,5 +212,6 @@ try {
|
||||
'url' => $e->getMessage(),
|
||||
'timeTaken' => getTimeTaken()
|
||||
));
|
||||
logToNginx("An upload was attempted but an error occurred: " . $e->getMessage());
|
||||
die();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user