Nginx配置文件

小小码农 2021年07月16日 1,120次浏览

Nginx配置文件(nginx.conf)位置在 /nginx/conf 下,
修改配置文件之后需要重新启动才能生效,重启命令:
nginx -s reload(注意路径为/usr/local/nginx/sbin/


#使用的用户和组,Nginx默认会使用缺省的nobody,如果自定义用户可先进行创建
#使用下面两条命令创建用户和用户组
#创建用户组
#/usr/sbin/groupadd www
#创建用户并指定用户所属的群组
#/usr/sbin/useradd -g www www
user www www;
#工作进程,默认值为1,该值应根据可用内核数,磁盘,网络子系统,服务器负载等更改为最佳值
#auto会自动根据核心数生成对应数量的worker进程
worker_processes auto;
#日志位置和日志级别,日志级别有如下几种
#[debug | info | notice | warn | error | crit]
#crit级别记录的信息最少,debug级别记录的信息最多
#如果出现错误信息无法查找原因可修改成error级别进行查看日志
error_log /data/wwwlogs/error_nginx.log crit;
#进程id存储文件,可通过查看此文件查找nginx进程ID
pid /var/run/nginx.pid;
#指定此进程可打开的最大文件描述符的值,就是最大能打开多少文件
#此值的大小与内存大小有关
#此参数值与worker_connections参数值条件为:
#worker_rlimit_nofile >= worker_connections 
worker_rlimit_nofile 51200;

events {
#事件模型,总共有如下几种模式:
#[kqueue | rtsig | epoll | /dev/poll | select | poll | eventport]
#默认选择epoll就可以,IO多路复用,提升性能
  use epoll;
#单个工作进程可以允许同时建立外部连接的数量
#此值的大小与内存大小、系统最大能打开文件数有关
#如果使用反向代理,那么单工作进程的最大连接数就是worker_connections /2
#反向代理占用2个连接、一个是客户端与Nginx,一个是Nginx与服务端连接
  worker_connections 51200;
#值:[on | off],[on]为防止被同时唤醒,默认为[off]
#同一时刻只有一个请求时防止多个睡眠进程被唤醒
#当worker_processes 不为 1 时,开启此功能,优化性能
  accept_mutex on;
#值:[on | off],[on]为允许一个工作进程同时接收多个网络请求
#默认为[off]
#每个工作进程可以同时接收多个新的网络连接
  multi_accept on;
}

http {
#网络资源的媒体类型,include是导入资源文件,mime.types为当前目录下文件
#里边存放的是浏览器需要解析的所有扩展文件格式
  include mime.types;
#默认文件类型,当web程序没有设置类型、并且mime.types里也没有对应类型,将采用此默认类型
  default_type application/octet-stream;
#The maximum size of the server name hash tables
#与server_names_hash_max_size一起控制服务器名称hash的大小,当服务器名称较多时,优先调整server_names_hash_max_size,不生效再调整server_names_hash_bucket_size,后续单开章结讲解这俩参数
  server_names_hash_bucket_size 128;
#设置来自客户端的请求头文件的缓冲区大小(请求行+请求头)
  client_header_buffer_size 32k;
#当请求头文件(请求行+请求头)缓冲区大小超过client_header_buffer_size 设置的值时,large_client_header_buffers 指令生效
#large_client_header_buffers 主要是限制客户端请求行和请求头的大小,超过设置的大小,则返回错误信息
#4代表请求行的最大大小(包含HTTP谓词、URL、HTTP协议、版本号)
#32代表请求头的最大大小(HTTP报文头)
#当请求行超过设定值时,将返回414错误(Request URI too large,请求URI太大)
#当请求头超过设定值时,将返回400错误(Bad request,错误请求)
  large_client_header_buffers 4 32k;
#设置请求体最大值(一般为文件上传),客户端采用Content-Length参数来设置,如果超过设定最大值,返回413错误(Request Entity Too Large,请求头太大)
#注意:1.浏览器不一定正确显示此错误
#2.客户端heard头如果没有配置Content-Length,或者Content-Length长度满足client_max_body_size 所设定的条件,但是文件大小超过client_max_body_size 设定的,此时,不一定能拦截成功,最好后端再进行二次判断
  client_max_body_size 1024m;
#指定客户端请求体缓冲区的大小,如果请求体大于缓冲区(设定的值),则整个请求体或部分被写入一个临时文件
#默认大小等于两个页面大小,取决于平台是8K还是16K
#临时文件默认存储路径为/client_body_temp_path(有可能版本不同文件夹名称也可能不同),如果要自定义临时文件路径,采用命令 client_body_temp_path,需要注意开通读写权限
  client_body_buffer_size 10m;
#激活或禁用,开启高效文件传输模式
#提升性能(网上找的,未验证)
#官方文档描述,具体逻辑以后验证
  sendfile on;
#开启或者关闭nginx在FreeBSD上使用TCP_NOPUSH套接字选项,
#在Linux上使用TCP_CORK套接字选项。 选项仅在使用sendfile的时候才开启。 #开启此选项允许在Linux和FreeBSD 4.*上将响应头和正文的开始部分一起
#发送,一次性发送整个文件。
#官方文档描述,具体逻辑以后验证
  tcp_nopush on;
#HTTP有KeepAlive模式,即一个TCP的连接存活时间设置,它会依据浏览器的不同
#而有不同的时间设置,Nginx的keepalive_timeout命令就是说TCP允许保持连接
#的时间是多久,超过这个时间服务器将关闭连接,保存时间越久服务器的压力越大
#默认值为75秒
  keepalive_timeout 120;
#是否发送Nginx版本号在错误页面和头
#尽量不要发送Nginx的版本号相关信息,因为Nginx的版本有可能存在漏洞,知道
#Nginx的版本号之后很容易通过版本漏洞攻击服务器
  server_tokens off;
#开启或关闭nginx使用TCP_NODELAY选项的功能.这个选项仅在将连接转变为
#长连接的时候才被启用。
#(译者注,在upstream发送响应到客户端时也会启用)。
#官方文档描述,具体逻辑以后验证
  tcp_nodelay on;
#FastCGI相关模块的设置,以后开单章节解析
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  fastcgi_intercept_errors on;

  #Gzip Compression
#Gzip压缩方式
  gzip on;
  gzip_buffers 16 8k;
  gzip_comp_level 6;
  gzip_http_version 1.1;
  gzip_min_length 256;
  gzip_proxied any;
  gzip_vary on;
  gzip_types
    text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
    text/javascript application/javascript application/x-javascript
    text/x-json application/json application/x-web-app-manifest+json
    text/css text/plain text/x-component
    font/opentype application/x-font-ttf application/vnd.ms-fontobject
    image/x-icon;
  gzip_disable "MSIE [1-6]\.(?!.*SV1)";

  ##Brotli Compression
#Brotli压缩方式,新型压缩方式,有可能部分浏览器不支持
  #brotli on;
  #brotli_comp_level 6;
  #brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

  ##If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency.
  #open_file_cache max=1000 inactive=20s;
  #open_file_cache_valid 30s;
  #open_file_cache_min_uses 2;
  #open_file_cache_errors on;

######################## default ############################
  server {
    listen 80;
    server_name _;
    access_log /data/wwwlogs/access_nginx.log combined;
    root /data/wwwroot/default
    index index.html index.htm index.php;
    #error_page 404 /404.html;
    #error_page 502 /502.html;
#开启nginx监控状态,allow:允许访问的ip地址,deny all拒绝所有访问,也可
#以单独禁止某个IP,例如 deny 192.168.0.1
#可以使用nginx -V进行查询该版本是否有监控模块(with-http_stub_status_module)
#注意:nginx -v 命令只显示nginx的版本号信息,nginx -V才能显示该版本
#nginx包含哪些模块,大写V,大写V,大写V!!!
#包含的监控信息如下:
#Active connections: 2 表示Nginx正在处理的活动连接数2个。
#server  2 表示Nginx启动到现在共处理了2个连接
#accepts 2 表示Nginx启动到现在共成功创建2次握手
#handled requests 1 表示总共处理了 1 次请求
#Reading:Nginx 读取到客户端的 Header 信息数
#Writing:Nginx 返回给客户端 Header 信息数
#Waiting:Nginx 已经处理完正在等候下一次请求指令的驻留链接(开启keep-#alive的情况下,这个值等于Active-(Reading+Writing))
    location /nginx_status {
      stub_status on;
      access_log off;
      allow 127.0.0.1;
      deny all;
    }
    location / {
	proxy_pass http://halo;
    }
    location ~ [^/]\.php(/|$) {
      #fastcgi_pass remote_php_ip:9000;
      fastcgi_pass unix:/dev/shm/php-cgi.sock;
      fastcgi_index index.php;
      include fastcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
      expires 30d;
      access_log off;
    }
    location ~ .*\.(js|css)?$ {
      expires 7d;
      access_log off;
    }
    location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md) {
      deny all;
    }
  }
########################## vhost #############################
  include vhost/*.conf;
}