一、nginx原理
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。其工作原理和配置项如下:
工作原理:
- 反向代理:Nginx可以作为反向代理服务器,接收客户端的请求,然后将请求转发给后端的服务器。Nginx可以根据不同的正则匹配采取不同的转发策略,如图片文件结尾的走文件服务器,动态页面走web服务器。同时,Nginx可以对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,Nginx可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。
- 负载均衡:Nginx提供了负载均衡策略,包括内置策略和扩展策略。负载均衡能够将服务的请求分发给负责相应服务的服务器,当请求同一个服务的请求过多时,服务器可以承受,从而提高服务器的处理能力。
配置项详解:
- worker_processes:Nginx的工作进程数。建议设置为CPU核数。
- events { worker_connections }:每个worker进程的最大连接数。这个数字应大于1024。
- http { }:主要配置HTTP服务器的区域。
- server { }:定义一个虚拟服务器。
- location { }:定义URL匹配的规则和处理方式。常见的处理方式有proxy_pass(代理到后端服务器)、index(指定默认的index文件)、try_files(尝试按顺序查找文件或目录)。
- error_page:定义错误页面。例如,error_page 404 /404.html;会将404错误指向一个自定义的404.html页面。
- proxy_pass:指定后端代理服务器地址。例如,proxy_pass http://127.0.0.1:8080;会将所有请求转发到本地的8080端口。
- sendfile、tcp_nopush、tcp_nodelay:与socket的send操作有关的指令。
- keepalive_timeout:长连接的超时时间。
- fastcgi_pass:指定FastCGI服务器的地址。
- 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;
}
}