- 由 虚拟的现实创建于10月 07, 2023 需要 4 分钟阅读时间
基础内容
安装openresty
yum install openresty openresty-resty openresty-doc \ > openresty-opm openresty-debug openresty-pcre-devel openresty-openssl-devel \ > openresty-zlib-devel openresty-debug gcc gcc-c++ tree git elfutils-devel wget https://openresty.org/download/openresty-1.15.8.1.tar.gz git clone https://github.com/fdintino/nginx-upload-module cd LuaJIT-2.1-20190507/ make clean make&&make install export LUAJIT_INC=/usr/local/include/luajit-2.1 export LUAJIT_LIB=/usr/local/lib cd openresty-1.15.8.1/nginx-1.15.8.1 ./configure --prefix=/usr/local/openresty/nginx \ --with-cc-opt='-O2 -DNGX_LUA_ABORT_AT_PANIC -I/usr/local/openresty/zlib/include -I/usr/local/openresty/pcre/include -I/usr/local/openresty/openssl/include' \ --add-module=../nginx-upload-module --add-module=../ngx_devel_kit-0.3.1rc1 --add-module=../echo-nginx-module-0.61 \ --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2 --add-module=../set-misc-nginx-module-0.32 \ --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 \ --add-module=../ngx_lua-0.10.15 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 \ --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 \ --add-module=../redis-nginx-module-0.3.7 --add-module=../ngx_stream_lua-0.0.7 \ --with-ld-opt='-Wl,-rpath,/usr/local/openresty/luajit/lib -L/usr/local/openresty/zlib/lib -L/usr/local/openresty/pcre/lib -L/usr/local/openresty/openssl/lib -Wl,-rpath,/usr/local/openresty/zlib/lib:/usr/local/openresty/pcre/lib:/usr/local/openresty/openssl/lib' \ --with-pcre-jit --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_v2_module --without-mail_pop3_module \ --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module \ --with-http_auth_request_module --with-http_secure_link_module --with-http_random_index_module --with-http_gzip_static_module \ --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-threads \ --with-stream --with-stream_ssl_preread_module --with-http_ssl_module make vim nginx.conf
配置nginx文件
worker_processes auto; worker_rlimit_nofile 8192; error_log logs/error.log error; events { use epoll; worker_connections 8000; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 256; client_header_buffer_size 256k; large_client_header_buffers 4 256k; client_max_body_size 200M; client_body_buffer_size 256k; sendfile on; tcp_nopush on; server_tokens off; keepalive_timeout 65; fastcgi_connect_timeout 600; fastcgi_send_timeout 600; fastcgi_read_timeout 600; fastcgi_buffer_size 64k; fastcgi_buffers 16 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml text/javascript image/jpeg image/gif image/png; gzip_vary on; gzip_disable "MSIE [1-6]\."; log_format mpos '{ "@timestamp": "$time_local", ' '"@fields": { ' 'remote_addr: "$remote_addr", ' 'body_bytes_sent: "$body_bytes_sent", ' 'request_time: "$request_time", ' 'status: "$status", ' 'request: "$request", ' 'request_method: "$request_method", ' 'body_bytes_sent:"$body_bytes_sent", ' ' upstream_addr: "$upstream_addr",' ' upstream_status: "$upstream_status",' ' upstream_response_time: "$upstream_response_time",' 'http_user_agent: "$http_user_agent" } }'; log_format json '$time_local - $remote_addr - $upstream_addr - $upstream_status'; lua_code_cache on; lua_shared_dict limit_conn_store 100M; lua_package_path "/usr/local/openresty/lualib/?.lua;;"; lua_package_cpath "/usr/local/openresty/lualib/?.so;;"; include vhost/*.conf; }
vim yunpan.conf
upstream yunpan.myj.com.cn { server 192.168.5.100:8000; keepalive 6000; } server { listen 80; server_name yunpan.myj.com.cn; rewrite ^(.*) https://$server_name$request_uri permanent; } server { listen 443 ssl; access_log logs/yunpan_access.log json; server_name yunpan.myj.com.cn; ssl_certificate /root/myj/214828708690016.pem; ssl_certificate_key /root/myj/214828708690016.key; ssl_session_cache shared:SSL:20m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; location / { root html; index index.html index.htm; 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_pass http://yunpan.myj.com.cn; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Forwarded-Proto https; proxy_read_timeout 1200s; access_by_lua_file conf/vhost/access.lua; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://192.168.5.100:8082; client_max_body_size 0; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 36000s; proxy_read_timeout 36000s; proxy_send_timeout 36000s; send_timeout 36000s; access_by_lua_file conf/vhost/access.lua; } error_page 404 /50x.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
vim access.lua
local limit_conn = require "resty.limit.conn" local lim, err = limit_conn.new("limit_conn_store", 1000, 1, 0.01) local lan_ip_addr = ngx.var.remote_addr if ( not string.find(lan_ip_addr,"192.168.13.44" or "127.0")) then ngx.var.limit_rate = "300K" end if not lim then ngx.log(ngx.ERR,"failed to instantiate a resty.limit.conn object: ", err) return ngx.exit(500) end local key = ngx.var.binary_remote_addr local delay, err = lim:incoming(key, true) if not delay then if err == "rejected" then return ngx.exit(503) end ngx.log(ngx.ERR, "failed to limit req: ", err) return ngx.exit(500) end if lim:is_committed() then local ctx = ngx.ctx ctx.limit_conn = lim ctx.limit_conn_key = key ctx.limit_conn_delay = delay end local conn = err if delay >= 0.001 then ngx.sleep(delay) end
参考指南
3、Prometheus metric library for Nginx
- 无标签
0 评论