Benutzer-Werkzeuge

Webseiten-Werkzeuge


nginx

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

nginx [2024/07/19 00:42]
127.0.0.1 Externe Bearbeitung
nginx [2025/06/08 22:21] (aktuell)
jango
Zeile 1: Zeile 1:
 +NginX ist ein sehr leichtgewichtige aber extrem skalierbarer und robuster Webserver, [[proxy|Proxy]] und Load Balancer.
  
 +<code>
 +// No foreground console
 +nginx -g "daemon off;"
 +
 +// test config
 +nginx -t
 +
 +// reload config
 +nginx -s reload
 +
 +// shutdown
 +nginx -s quit
 +
 +// enable config
 +ln -s /etc/nginx/sites-available/www.example.org.conf /etc/nginx/sites-enabled/
 +</code>
 +
 +=====HTTP=====
 +
 +<code>
 +worker_processes  1;
 +error_log  logs/error.log info;
 +
 +events {
 +    worker_connections  1024;
 +}
 +
 +http {
 +    server {
 +        listen      80;
 +        location / {
 +            root html;
 +            rewrite ^/test$ test.php permanent;
 +        } 
 +        
 +        # need to start php
 +        # php-cgi.exe -b 127.0.0.1:9999
 +        location ~ \.php$ {
 + fastcgi_pass 127.0.0.1:9999;
 + fastcgi_index index.php;
 + fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 + include fastcgi_params;
 +        }
 +    }
 +}
 +</code>
 +
 +=====Proxy=====
 +
 +<code>
 +server {
 +        server_name subdomain1.example.com;
 +        location / {
 +            proxy_pass       http://hostname1:port1;
 +        }
 +}
 +server {
 +        server_name subdomain2.example.com;
 +        location / {
 +            proxy_pass       http://hostname2:port2;
 +        }
 +}
 +</code>
 +
 +=====SSL proxy=====
 +
 +<code>
 +server {
 +    listen 443 ssl;
 +    server_name example.com;
 +
 +    ssl_certificate /etc/nginx/ssl/example.com.crt;
 +    ssl_certificate_key /etc/nginx/ssl/example.com.key;
 +
 +    # SSL-Protokolle und Cipher-Suiten konfigurieren (optional)
 +    ssl_protocols TLSv1.2 TLSv1.3;
 +    ssl_prefer_server_ciphers on;
 +    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
 +
 +    location / {
 +        proxy_pass http://nextcloud-container:8080;
 +        proxy_set_header 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;
 +    }
 +}
 +</code>
 +=====Loadbalancer=====
 +
 +Siehe [[https://www.nginx.com/resources/wiki/start/topics/examples/loadbalanceexample/|NGINX Wiki - Simple Loadbalancer]] mit dem [[http://nginx.org/en/docs/http/ngx_http_upstream_module.html|Upstream modul]].
 +
 +Entweder in der Datei <code>/etc/nginx/sites-available/default</code> oder einer eigenen Configdatei folgende Objekte nach dem http Objekt einfügen.
 +
 +<code>
 +log_format upstreamlog '$remote_addr - $server_name - $upstream_addr [$request] upstream_response_time $upstream_response_time msec $msec request_tim $request_time';
 +
 +upstream myproject {
 +  server 127.0.0.1:8000 weight=3;
 +  server 127.0.0.1:8001;
 +  server 127.0.0.1:8002;    
 +  server 127.0.0.1:8003;
 +}
 +
 +server {
 +  listen 80;
 +  server_name www.domain.com;
 +  access_log /var/log/nginx/access.log upstreamlog;
 +  location / {
 +    proxy_pass http://myproject;
 +  }
 +}
 +</code>
 +
 +=====RTMP=====
 +
 +Für Windows [[https://github.com/zarat/nginx-rtmp-win32|zarat/nginx-rtmp-win32]]
 +
 +<code>
 +worker_processes  1;
 +
 +error_log  logs/error.log info;
 +
 +events {
 +    worker_connections  1024;
 +}
 +
 +rtmp {
 +    server {
 +        listen 1935;
 +
 +        application live {
 +            live on;
 +        }
 +
 +        application hls {
 +            live on;
 +            hls on;  
 +            hls_path temp/hls;  
 +            hls_fragment 8s;  
 +        }
 +    }
 +}
 +
 +http {
 +    server {
 +        listen      8080;
 +
 +        location / {
 +            root html;
 +        }
 +
 +        location /stat {
 +            rtmp_stat all;
 +            rtmp_stat_stylesheet stat.xsl;
 +        }
 +
 +        location /stat.xsl {
 +            root html;
 +        }
 +
 +        location /hls {  
 +            #server hls fragments  
 +            types{  
 +                application/vnd.apple.mpegurl m3u8;  
 +                video/mp2t ts;  
 +            }  
 +            alias temp/hls;  
 +            expires -1;  
 +        }  
 +    }
 +}
 +</code>
 +
 +Um das RTMP Modul zu nutzen muss man nginx laut einigen Quellen selbst kompilieren
 +
 +<code>
 +git clone https://github.com/arut/nginx-rtmp-module
 +apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
 +wget http://nginx.org/download/nginx-1.10.1.tar.gz
 +tar -xf nginx-1.10.1.tar.gz
 +cd nginx-1.10.1
 +./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
 +make -j 1
 +make install
 +</code>
 +
 +Anscheinend stimmt das aber nicht ganz ich habe mit apt die entsprechende lib installiert und es funktioniert genauso.
 +
 +<code>
 +apt install libnginx-mod-rtmp
 +</code>
 +
 +<code>
 +rtmp {
 + server {
 + listen 1935;
 + chunk_size 8192;
 +
 + application stream {
 + live on;
 + meta copy;
 + push rtmp://live.twitch.tv/app/live_XYZ_ZXY;
 +                        on_play http://localhost/ping.php; # parameters app and name are passed by default 
 + }
 + }
 +}
 +</code>
 +
 +<code>
 +ffmpeg -re -i https://dwamdstream106.akamaized.net/hls/live/2017965/master.m3u8 -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv rtmp://localhost/live
 +</code>
 +
 +<code>
 +rtmp {
 +
 +    server {
 +
 +        listen 1935;
 +
 +        chunk_size 4000;
 +
 +        # TV mode: one publisher, many subscribers
 +        application mytv {
 +
 +            # enable live streaming
 +            live on;
 +
 +            # record first 1K of stream
 +            record all;
 +            record_path /tmp/av;
 +            record_max_size 1K;
 +
 +            # append current timestamp to each flv
 +            record_unique on;
 +
 +            # publish only from localhost
 +            allow publish 127.0.0.1;
 +            deny publish all;
 +
 +            #allow play all;
 +        }
 +
 +        # Transcoding (ffmpeg needed)
 +        application big {
 +            live on;
 +
 +            # On every pusblished stream run this command (ffmpeg)
 +            # with substitutions: $app/${app}, $name/${name} for application & stream name.
 +            #
 +            # This ffmpeg call receives stream from this application &
 +            # reduces the resolution down to 32x32. The stream is the published to
 +            # 'small' application (see below) under the same name.
 +            #
 +            # ffmpeg can do anything with the stream like video/audio
 +            # transcoding, resizing, altering container/codec params etc
 +            #
 +            # Multiple exec lines can be specified.
 +
 +            exec ffmpeg -re -i rtmp://localhost:1935/$app/$name -vcodec flv -acodec copy -s 32x32
 +                        -f flv rtmp://localhost:1935/small/${name};
 +        }
 +
 +        application small {
 +            live on;
 +            # Video with reduced resolution comes here from ffmpeg
 +        }
 +
 +        application webcam {
 +            live on;
 +
 +            # Stream from local webcam
 +            exec_static ffmpeg -f video4linux2 -i /dev/video0 -c:v libx264 -an
 +                               -f flv rtmp://localhost:1935/webcam/mystream;
 +        }
 +
 +        application mypush {
 +            live on;
 +
 +            # Every stream published here
 +            # is automatically pushed to
 +            # these two machines
 +            push rtmp1.example.com;
 +            push rtmp2.example.com:1934;
 +        }
 +
 +        application mypull {
 +            live on;
 +
 +            # Pull all streams from remote machine
 +            # and play locally
 +            pull rtmp://rtmp3.example.com pageUrl=www.example.com/index.html;
 +        }
 +
 +        application mystaticpull {
 +            live on;
 +
 +            # Static pull is started at nginx start
 +            pull rtmp://rtmp4.example.com pageUrl=www.example.com/index.html name=mystream static;
 +        }
 +
 +        # video on demand
 +        application vod {
 +            play /var/flvs;
 +        }
 +
 +        application vod2 {
 +            play /var/mp4s;
 +        }
 +
 +        # Many publishers, many subscribers
 +        # no checks, no recording
 +        application videochat {
 +
 +            live on;
 +
 +            # The following notifications receive all
 +            # the session variables as well as
 +            # particular call arguments in HTTP POST
 +            # request
 +
 +            # Make HTTP request & use HTTP retcode
 +            # to decide whether to allow publishing
 +            # from this connection or not
 +            on_publish http://localhost:8080/publish;
 +
 +            # Same with playing
 +            on_play http://localhost:8080/play;
 +
 +            # Publish/play end (repeats on disconnect)
 +            on_done http://localhost:8080/done;
 +
 +            # All above mentioned notifications receive
 +            # standard connect() arguments as well as
 +            # play/publish ones. If any arguments are sent
 +            # with GET-style syntax to play & publish
 +            # these are also included.
 +            # Example URL:
 +            #   rtmp://localhost/myapp/mystream?a=b&c=d
 +
 +            # record 10 video keyframes (no audio) every 2 minutes
 +            record keyframes;
 +            record_path /tmp/vc;
 +            record_max_frames 10;
 +            record_interval 2m;
 +
 +            # Async notify about an flv recorded
 +            on_record_done http://localhost:8080/record_done;
 +
 +        }
 +
 +
 +        # HLS
 +
 +        # For HLS to work please create a directory in tmpfs (/tmp/hls here)
 +        # for the fragments. The directory contents is served via HTTP (see
 +        # http{} section in config)
 +        #
 +        # Incoming stream must be in H264/AAC. For iPhones use baseline H264
 +        # profile (see ffmpeg example).
 +        # This example creates RTMP stream from movie ready for HLS:
 +        #
 +        # ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264
 +        #    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
 +        #    -f flv rtmp://localhost:1935/hls/movie
 +        #
 +        # If you need to transcode live stream use 'exec' feature.
 +        #
 +        application hls {
 +            live on;
 +            hls on;
 +            hls_path /tmp/hls;
 +        }
 +
 +        # MPEG-DASH is similar to HLS
 +
 +        application dash {
 +            live on;
 +            dash on;
 +            dash_path /tmp/dash;
 +        }
 +    }
 +}
 +
 +# HTTP can be used for accessing RTMP stats
 +http {
 +
 +    server {
 +
 +        listen      8080;
 +
 +        # This URL provides RTMP statistics in XML
 +        location /stat {
 +            rtmp_stat all;
 +
 +            # Use this stylesheet to view XML as web page
 +            # in browser
 +            rtmp_stat_stylesheet stat.xsl;
 +        }
 +
 +        location /stat.xsl {
 +            # XML stylesheet to view RTMP stats.
 +            # Copy stat.xsl wherever you want
 +            # and put the full directory path here
 +            root /path/to/stat.xsl/;
 +        }
 +
 +        location /hls {
 +            # Serve HLS fragments
 +            types {
 +                application/vnd.apple.mpegurl m3u8;
 +                video/mp2t ts;
 +            }
 +            root /tmp;
 +            add_header Cache-Control no-cache;
 +        }
 +
 +        location /dash {
 +            # Serve DASH fragments
 +            root /tmp;
 +            add_header Cache-Control no-cache;
 +        }
 +    }
 +}
 +</code>
 +
 +=====Links=====
 +
 +    * [[https://www.youtube.com/watch?v=7VAI73roXaY|NGINX Crash Course]]
nginx.txt · Zuletzt geändert: 2025/06/08 22:21 von jango