nginx原理和配置项详解

一、nginx原理

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。其工作原理和配置项如下:

工作原理:

  1. 反向代理:Nginx可以作为反向代理服务器,接收客户端的请求,然后将请求转发给后端的服务器。Nginx可以根据不同的正则匹配采取不同的转发策略,如图片文件结尾的走文件服务器,动态页面走web服务器。同时,Nginx可以对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,Nginx可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。
  2. 负载均衡:Nginx提供了负载均衡策略,包括内置策略和扩展策略。负载均衡能够将服务的请求分发给负责相应服务的服务器,当请求同一个服务的请求过多时,服务器可以承受,从而提高服务器的处理能力。

配置项详解:

  1. worker_processes:Nginx的工作进程数。建议设置为CPU核数。
  2. events { worker_connections }:每个worker进程的最大连接数。这个数字应大于1024。
  3. http { }:主要配置HTTP服务器的区域。
  4. server { }:定义一个虚拟服务器。
  5. location { }:定义URL匹配的规则和处理方式。常见的处理方式有proxy_pass(代理到后端服务器)、index(指定默认的index文件)、try_files(尝试按顺序查找文件或目录)。
  6. error_page:定义错误页面。例如,error_page 404 /404.html;会将404错误指向一个自定义的404.html页面。
  7. proxy_pass:指定后端代理服务器地址。例如,proxy_pass http://127.0.0.1:8080;会将所有请求转发到本地的8080端口。
  8. sendfiletcp_nopushtcp_nodelay:与socket的send操作有关的指令。
  9. keepalive_timeout:长连接的超时时间。
  10. fastcgi_pass:指定FastCGI服务器的地址。
  11. include /etc/nginx/conf.d/*.conf:包含其他配置文件。

二、nginx配置详解

这一部分可以作为公共配置,包含的   
  include /etc/nginx/conf.d/*.conf;

可以作为子配置文件引入

#配置用户或者组,默认为nobody
user  nginx;

#允许生成的进程数,默认为1,一般配置为cpu核数
worker_processes  auto;
#错误日志
error_log  /var/log/nginx/error.log notice;

#进程ID
pid        /var/run/nginx.pid;

events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept off;  #设置一个进程是否同时接受多个网络连接,默认为off
     # epoll 模型对事件处理进行优化
    use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    #允许最大连接数
    worker_connections  5120;
}

#http块
http {
   # 相关安全漏洞响应头
   # 检测到目标 X-Content-Type-Options响应头缺失 这个暂时不开启,不然部分banner无法使用
   add_header X-Content-Type-Options nosniff;
   # 检测到目标 X-XSS-Protection响应头缺失
   add_header X-XSS-Protection "1; mode=block";
   # 检测到目标 Content-Security-Policy响应头缺失
   add_header Content-Security-Policy "default-src 'self' http: https://* data: blob: 'unsafe-eval' 'unsafe-inline';child-src 'none' " always;
   # 检测到目标 Referrer-Policy响应头缺失
   add_header Referrer-Policy "no-referrer-when-downgrade" always;
   # 检测到目标 X-Permitted-Cross-Domain-Policies响应头缺失
   add_header X-Permitted-Cross-Domain-Policies none;
   # 检测到目标 X-Download-Options响应头缺失
   add_header X-Download-Options noopen;
   # 检测到目标 Strict-Transport-Security响应头缺失
   add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

   add_header X-Frame-Options "SAMEORIGIN";
   #隐藏nginx版本信息
   server_tokens off;
   #文件扩展名与文件类型映射表
    include       /etc/nginx/mime.types;
     #默认文件类型,默认为text/plain
    default_type  application/octet-stream;
    
    #日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main if=$ignore_ua;

    sendfile        on;
    #tcp_nopush     on;

     #连接超时时间,默认为75s,可以在http,server,location块。
    keepalive_timeout  65;

    #gzip  on;
    client_max_body_size 1024m;

     #包含的自定义配置文件块
    include /etc/nginx/conf.d/*.conf;

     #是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。
    fastcgi_intercept_errors on;

   #Disable logging for ELB healthcheck. It creates lots of noise on logging platform
   ##关闭健康检测日志的输出
   map $http_user_agent $ignore_ua {
   default                 1;
   "clb-healthcheck"       0;

     }

}

猜你喜欢

转载自blog.csdn.net/dongjing991/article/details/135273003