Ngnix apps in subfolders with different ports

62 Views Asked by At

I have a problem with my nextcloud server, running on a RaspberryPi at home.

The thing I do not get running, is programs in subfolders of my domain using nginx. In detail

Software: Ubuntu 22.04.3 linux 5.15.0 raspi aarch64 Nginx 1.25.2 Nagios4 nagios4-core (4.4.6-4)

Error message in the logfile is this:

2023/08/26 10:35:26 [notice] 137064#137064: *16960 "^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy)" does not match "/index.php/nagios", client: 192.168.0.1, server: mycloud.myserver-domain.com, request: "GET /nagios HTTP/2.0", host: "mycloud.myserver-domain.com"

Placed in conf.d are the config files Gatewayhost.conf:

upstream php-handler {
    server unix:/run/php/php8.2-fpm.sock;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name mycloud.myserver-domain.com;

    root /var/www;

    location ^~ /.well-known/acme-challenge {
        default_type text/plain;
        root /var/www/letsencrypt;
    }

    location /nagios {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass https://127.0.0.1:83;
        proxy_redirect off;
    }

    location / {
        return 301 https://$host$request_uri;
    }

    location ^~ /phpmyadmin/ {
        proxy_connect_timeout 3600;
        proxy_send_timeout 3600;
        proxy_read_timeout 3600;
        send_timeout 3600;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_max_temp_file_size 100m;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:85;
        proxy_redirect off;
    }
}

Nextcloud.conf:

# Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable {
    "" "";
    default "immutable";
}


server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name mycloud.myserver-domain.com my.ip.v4.adress;

    # Path to the root of your installation
    root /var/www/nextcloud;

    # SSL configuration
        # RSA certificates
        ssl_certificate /etc/letsencrypt/mycloud.myserver-domain.com/rsa/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/mycloud.myserver-domain.com/rsa/key.pem;
        # ECC certificates
        ssl_certificate /etc/letsencrypt/mycloud.myserver-domain.com/ecc/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/mycloud.myserver-domain.com/ecc/key.pem;

        # This should be ca.pem (certificate with the additional intermediate certificate)
        # See here: https://certbot.eff.org/docs/using.html
        # ECC
        ssl_trusted_certificate /etc/letsencrypt/mycloud.myserver-domain.com/ecc/ca.pem;

        # Include SSL configuration
        include /etc/nginx/snippets/ssl.conf;

        # Include headers
        include /etc/nginx/snippets/headers.conf;

    # set max upload size and increase upload timeout:
    client_max_body_size 10G;
    client_body_timeout 300s;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/>

    # Pagespeed is not supported by Nextcloud, so if your server is built
    # with the `ngx_pagespeed` module, uncomment this line to disable it.
    #pagespeed off;

    # Specify how to handle directories -- specifying `/index.php$request_uri`
    # here as the fallback means that Nginx always exhibits the desired behaviour
    # when a client requests a path that corresponds to a directory that exists
    # on the server. In particular, if that directory contains an index.php file,
    # that file is correctly served; if it doesn't, then the request is passed to
    # the front-end controller. This consistent behaviour means that we don't need
    # to specify custom rules for certain paths (e.g. images and other assets,
    # `/updater`, `/ocm-provider`, `/ocs-provider`), and thus
    # `try_files $uri $uri/ /index.php$request_uri`
    # always provides the desired behaviour.
    index index.php index.html /index.php$request_uri;

    # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
    location = / {
        if ( $http_user_agent ~ ^DavClnt ) {
            return 302 /remote.php/webdav/$is_args$args;
        }
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Make a regex exception for `/.well-known` so that clients can still
    # access it despite the existence of the regex rule
    # `location ~ /(\.|autotest|...)` which would otherwise handle requests
    # for `/.well-known`.
    location ^~ /.well-known {
        # The rules in this block are an adaptation of the rules
        # in `.htaccess` that concern `/.well-known`.

        location = /.well-known/carddav { return 301 /remote.php/dav/; }
        location = /.well-known/caldav  { return 301 /remote.php/dav/; }

        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }

        # Let Nextcloud's API for `/.well-known` URIs handle all other
        # requests by passing them to the front-end controller.
        return 301 /index.php$request_uri;
    }

    # Rules borrowed from `.htaccess` to hide certain paths from clients
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)                { return 404; }

    # Ensure this block, which passes PHP files to the PHP process, is above the blocks
    # which handle static assets (as seen below). If this block is not declared first,
    # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
    # to the URI, resulting in a HTTP 500 error response.
    location ~ \.php(?:$|/) {
        # Required for legacy support
        rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provid>

        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
         set $path_info $fastcgi_path_info;

        try_files $fastcgi_script_name =404;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;

        fastcgi_param modHeadersAvailable true;         # Avoid sending the security headers twice
        fastcgi_param front_controller_active true;     # Enable pretty urls
        fastcgi_pass php-handler;

        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;

        fastcgi_max_temp_file_size 0;

        fastcgi_read_timeout 600;
        fastcgi_send_timeout 600;
        fastcgi_connect_timeout 600;

        fastcgi_param PHP_VALUE "upload_max_filesize = 10G
               post_max_size = 10G
               max_execution_time = 3600
               output_buffering = off";
    }

    location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463, $asset_immutable";
        access_log off;     # Optional: Don't log access to assets

        location ~ \.wasm$ {
            default_type application/wasm;
        }
    }

    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }

    # Rule borrowed from `.htaccess`
    location /remote {
        return 301 /remote.php$request_uri;
    }

    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }
}

Nagios.conf:

upstream nagios {
    server 127.0.0.1:83;
    keepalive 64;
}

server {
    server_name     127.0.0.1;
    listen          127.0.0.1:83;

    root            /usr/local/nagios/share;
    index           index.php index.html index.htm;
    access_log      /var/log/nginx/nagios.access.log;
    error_log       /var/log/nginx/nagios.error.log debug;
    auth_basic      "Nagios Access";
    auth_basic_user_file  /usr/local/nags/etc/htpasswd.users;
    # Fixes frames not working
    add_header X-Frame-Options "ALLOW";

    location ^~ \.php$ {
        try_files       $uri = 404;
        fastcgi_index   index.php;
        fastcgi_pass    unix:/run/php/php8.2-fpm.sock;
        include         /etc/nginx/fastcgi_params;
    }

    location ^~ \.cgi$ {
        root            /usr/local/nagios/sbin;
        rewrite         ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
        fastcgi_param   AUTH_USER $remote_user;
        fastcgi_param   REMOTE_USER $remote_user;
        include         /etc/nginx/fastcgi_params;
        fastcgi_pass    unix:/run/fcgiwrap.socket;
    }
    # Fixes the fact some links are expected to resolve to /nagios, see here.
    location ~^/ {
        alias /usr/local/nagios/share;
    }
}

phpmyadmin.conf:

server {
    listen 127.0.0.1:85;
    server_name 127.0.0.1;

    # Path to the root of your installation
    root /usr/share/;

    # Logging
    error_log /var/log/phpmyadmin.access_log;
    access_log /var/log/phpmyadmin.error_log;

    location /phpmyadmin {
        root /usr/share/;
        index index.php index.html index.htm;
        location ~ ^/phpmyadmin/(.+\.php)$ {
           try_files $uri =404;
           root /usr/share/;
           fastcgi_pass unix:/run/php/php8.1-fpm.sock;
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include /etc/nginx/fastcgi_params;
        }

        location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
           root /usr/share/;
        }
    }
}

Maybe is there someone how had the same problem and solved it.

0

There are 0 best solutions below