官网下载
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;
}