nginx实操

官网下载

http://nginx.org/en/download.html

配置

rz -be
nginx-1.19.9.tar.gz
tar -zxvf nginx-1.19.9.tar.gz
cp -R nginx-1.19.9 /usr/loca/

修改日志配置

cd /usr/local/nginx-1.19.9/objs
vim ngx_auto_config.h

#ifndef NGX_PID_PATH
#define NGX_PID_PATH  "/data/logs/nginx/logs/nginx.pid"
#endif

#ifndef NGX_LOCK_PATH
#define NGX_LOCK_PATH  "logs/nginx.lock"
#endif

#ifndef NGX_ERROR_LOG_PATH
#define NGX_ERROR_LOG_PATH  "/data/logs/nginx/logs/error.log"
#endif

#ifndef NGX_HTTP_LOG_PATH
#define NGX_HTTP_LOG_PATH  "/data/logs/nginx/logs/access.log"
#endif

编译

cd /usr/local/nginx-1.19.9
make && make install

启动、停止Nginx服务

#启动nginx
/usr/local/nginx/sbin/nginx     

# 停止nginx 服务
/usr/local/nginx/sbin/nginx -s stop

#不停止服务,重新加载配置文件
/usr/local/nginx/ -s reload

##配置文件

  • nginx.conf
#nginx 要开启的子进程数量,运行过程中根据实际占用内存决定,一般cpu内核数量的整数倍
worker_processes  2;

#错误日志文件的位置以及处处级别
error_log  /data/logs/nginx/logs/error.log info;

#用来指定进程id的存储文件的位置
pid        /data/logs/nginx/logs/nginx.pid;

#用于nginx工作模式的配置
events {
    #指定最大可以同时接收的连接数量。最大连接数量是和worker pocesses共同决定的
    worker_connections  1024;
}

http {
    #指定在当前文件中包含另一个文件的指令
    include       mime.types;

    #指定默认处理的文件类型可以是二进制
    default_type  application/octet-stream;

    #设置存储访问记录的日志
    access_log  /data/logs/nginx/logs/access.log;

    #配置on 让sendfile 发挥作用,将文件的会写过程交给缓冲区去完成,而不是放在应用中完成,可以提升性能。
    sendfile        on;

    #给客户端分配连接超时时间,服务器会在这个时间后关闭连接。一般设置时间较短,可以让nginx工作持续性好
    keepalive_timeout  65;

    #虚拟主机配置
    include /usr/local/nginx/conf.d/*.conf;
}
  • ai-recom-nacos.conf
upstream ai-recom-nacos {
    #
    server 10.66.226.110:8848 weight=1 max_fails=3 fail_timeout=60s;
}
server {
    listen       80;
    server_name  10.64.224.58;

    #客户端请求服务器最大允许的大小。传输的数据大于client_max_body_size,一定是传不成功的。小于client_body_buffer_size直接在内存中高效存储。如果大于client_body_buffer_size小于client_max_body_size会存储临时文件,临时文件一定要有权限。
如果追求效率,就设置 client_max_body_size client_body_buffer_size相同的值,这样就不会存储临时文件,直接存储在内存了。
    client_body_buffer_size 2048k;
    access_log  /data/logs/nginx/logs/nacos.access.log;
    error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   html;
    }

    #基本配置:location / 表示访问根目录;root用于指定访问根目录时,访问虚拟主机的web目录;index在不指定具体访问资源时,默认展示的资源文件列表
    location / {
        root    /nginx/www;
        index   index.php index.html index.htm;
    }
    #论坛放映厅推荐策略通道服务
    location /nacos/ {
      proxy_pass http://ai-recom-nacos;
    }
}

线上配置如下:

#user  nobody;
#子进程数
worker_processes 4;
#定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】
error_log  /dev/stderr crit;
#error_log  /dev/stderr error;

events {
 #最大可以同时接收的连接数量
 worker_connections 10240;
 #配置指定了县城轮询的方法,如果是linux2.6+	,使用epoll
 use epoll;
}

http {

    #指定在当前文件中包含另一个文件的指令
    include       mime.types;
    
    #指定默认处理的文件类型可以是二进制
    default_type  application/octet-stream;
    
    ############
    #用于进行nginx全局信息的配置
    log_format main      '{ "@timestamp": "$time_iso8601", '
                         '"remote_addr": "$remote_addr", '
                         '"bytes": "$body_bytes_sent", '
                         '"request_time": "$request_time", '
                         '"status": "$status", '
                         '"http_host": "$http_host", '
                         '"http_request": "$request_uri", '
                         '"method": "$request_method", '
                         '"protocol": "$server_protocol", '
                         '"http_range": "$http_range", '
                         '"referer": "$http_referer", '
                         '"user_agent":"$http_user_agent", '
                         '"x_forwarded_for": "$http_x_forwarded_for", '
                         '"upstream_addr": "$upstream_addr", '
                         '"upstream_response_time": "$upstream_response_time", '
                         '"upstream_status": "$upstream_status" }';

    #设置存储访问记录的日志
    access_log /dev/stdout main;	
    
    #文件的回写过程交给数据缓冲去去完成,提升性能
    sendfile on;
    
    #让nginx在一个数据包中发送所有的头文件,而不是一个一个单独发
    tcp_nopush on;

    让nginx不要缓存数据,而是一段一段发送,如果数据的传输有实时性的要求的话可以配置它,发送完一小段数据就立刻能得到返回值,但是不要滥用
    tcp_nodelay on;
    ##proxy upsteam ###
    
    # proxy_redirect将被代理服务器的响应头中的location字段进行修改后返回给客户端
    proxy_redirect off;
    proxy_set_header Connection "";
    proxy_set_header Host $http_host;
    proxy_set_header Client-ip $remote_addr;
    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_buffering on;
    proxy_connect_timeout 30;
    proxy_send_timeout 30;
    proxy_read_timeout 60;
    proxy_max_temp_file_size 0;
    proxy_http_version 1.1;
    proxy_buffer_size 32k;
    proxy_buffers 8 32k;
    proxy_busy_buffers_size 64k;
    ###############
    check_shm_size 30m;
    client_body_timeout 30;
    keepalive_timeout 30;
    client_max_body_size 0m;
    client_header_buffer_size 8k;
    large_client_header_buffers 4 32k;
    ##################
    lua_shared_dict prometheus_metrics 50M;
    lua_package_path "/usr/local/nginx/conf/prometheus.lua";
    init_by_lua '
      prometheus = require("prometheus").init("prometheus_metrics")
      metric_requests = prometheus:counter(
        "nginx_http_requests_total", "Number of HTTP requests", {"host", "status"})
      metric_latency = prometheus:histogram(
        "nginx_http_request_duration_seconds", "HTTP request latency", {"host"})
      metric_connections = prometheus:gauge(
        "nginx_http_connections", "Number of HTTP connections", {"state"})
    ';
    log_by_lua '
      metric_requests:inc(1, {ngx.var.server_name, ngx.var.status})
      metric_latency:observe(tonumber(ngx.var.request_time), {ngx.var.server_name})
    ';
    ###################
    server {
      listen 80 default backlog=10240;
      server_name  localhost;

      location /metrics {
        content_by_lua '
        prometheus:collect()
      ';
      }
 
      location /check {
      default_type text/plain;
      content_by_lua 'ngx.say("hello lua")';
     }

      location /ngx_status {
        allow 10.0.0.0/8;
        allow 172.0.0.0/8;
        deny all;
        stub_status on;
    }
    }
    ###############################
    include /etc/nginx/conf.d/*.conf;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值