Extendy / SmartyURL

SmartyURL is a PHP-based web application for Smart URL management, Sharing, shortening, and analytics, featuring smart redirects.
https://docs.smartyurl.extendy.net/
MIT License
12 stars 2 forks source link

getting assist/newurl.js & assist/smartyurl.js make error in nginx #38

Closed ghost closed 11 months ago

ghost commented 11 months ago

While SmartyURL generates JavaScript codes through the CodeIgniter Controllers , I noticed that this caused an HTTP 404 error on the nginx server if the file extension of the included file remained ending with the .js extension.

image

While tested locally on nginx too (using Homestead) works fine but in some nginx servers return 404 file not found for example: https://github.com/Extendy/SmartyURL/blob/cc9420f741b07d510ebe48f78351f412fa15079a/app/Views/basic/layout.php#L272 https://github.com/Extendy/SmartyURL/blob/cc9420f741b07d510ebe48f78351f412fa15079a/app/Views/basic/url/new.php#L192

If I remove the .js from the filename it works fine, but if keep the .js it will shown 404 file not found on some nginx servers.

It may be necessary to change the Nginx configuration, but to improve software compatibility without complicating installation, I recommend removing the .js extension from the file name.

The nginx server which return 404 error was on CloudPanel using proxy on port 80 , but if Try to get the .js file on port 8080 it wil rendered normally. image

and this is the nginx configuration:

server {
  listen 80;
  listen [::]:80;
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  {{ssl_certificate_key}}
  {{ssl_certificate}}
  server_name go.extendy.link;
  {{root}}

  {{nginx_access_log}}
  {{nginx_error_log}}

  if ($scheme != "https") {
    rewrite ^ https://$host$uri permanent;
  }

  location ~ /.well-known {
    auth_basic off;
    allow all;
  }

  {{settings}}

  location / {
    {{varnish_proxy_pass}}
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_hide_header X-Varnish;
    proxy_redirect off;
    proxy_max_temp_file_size 0;
    proxy_connect_timeout      720;
    proxy_send_timeout         720;
    proxy_read_timeout         720;
    proxy_buffer_size          128k;
    proxy_buffers              4 256k;
    proxy_busy_buffers_size    256k;
    proxy_temp_file_write_size 256k;
  }

  location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf|map)$ {
    add_header Access-Control-Allow-Origin "*";
    expires max;
    access_log off;
  }

  if (-f $request_filename) {
    break;
  }

}

server {
  listen 8080;
  listen [::]:8080;
  server_name examplesmartyurl.link;
  {{root}}

  try_files $uri $uri/ /index.php?$args;
  index index.php index.html;

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_intercept_errors on;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    try_files $uri =404;
    fastcgi_read_timeout 3600;
    fastcgi_send_timeout 3600;
    fastcgi_param HTTPS "on";
    fastcgi_pass 127.0.0.1:{{php_fpm_port}};
    fastcgi_param PHP_VALUE "{{php_settings}}";
  }

  if (-f $request_filename) {
    break;
  }
}

I did not test it on ther web servers like apache.

We must investigate this problem thoroughly and find a solution that does not require special Nginx or web server configuration changes.