Nginx服务器配置和详解
ginx学习
目录Nginx 服务器配置和详解Nginx 模板配置Nginx 模块说明核心模块主模块event 模块http 模块upstream 模块server 模块location 模块
Nginx 服务器配置和详解
Nginx 扮演 web 开发的服务端入口控制的角色,相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。这需要开发人员对其配置有一定程度的了解,主要用到的是负载均衡和反向代理这两项功能。
Nginx 模板配置
user www www; worker_processes 2; pid /var/run/nginx.pid; #[ debug | info | notice | warn | error | crit ] error_log /var/log/nginx.error_log info; events { worker_connections 2000; # use [ kqueue | epoll | /dev/poll | select | poll ]; use kqueue; } http { include conf/mime.types; default_type application/octet-stream; log_format main \'$remote_addr - $remote_user [$time_local] \' \'"$request" $status $bytes_sent \' \'"$http_referer" "$http_user_agent" \' \'"$gzip_ratio"\'; log_format download \'$remote_addr - $remote_user [$time_local] \' \'"$request" $status $bytes_sent \' \'"$http_referer" "$http_user_agent" \' \'"$http_range" "$sent_http_content_range"\'; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; gzip on; gzip_min_length 1100; gzip_buffers 4 8k; gzip_types text/plain; output_buffers 1 32k; postpone_output 1460; sendfile on; tcp_nopush on; tcp_nodelay on; send_lowat 12000; keepalive_timeout 75 20; #lingering_time 30; #lingering_timeout 10; #reset_timedout_connection on; server { listen one.example.com; server_name one.example.com www.one.example.com; access_log /var/log/nginx.access_log main; location / { proxy_pass http://127.0.0.1/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; client_body_temp_path /var/nginx/client_body_temp; proxy_connect_timeout 70; proxy_send_timeout 90; proxy_read_timeout 90; proxy_send_lowat 12000; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_temp_path /var/nginx/proxy_temp; charset koi8-r; } error_page 404 /404.html; location = /404.html { root /spool/www; } location /old_stuff/ { rewrite ^/old_stuff/(.*)$ /new_stuff/$1 permanent; } location /download/ { valid_referers none blocked server_names *.example.com; if ($invalid_referer) { #rewrite ^/ http://www.example.com/; return 403; } #rewrite_log on; # rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3 rewrite ^/(download/.*)/mp3/(.*)\..*$ /$1/mp3/$2.mp3 break; root /spool/www; #autoindex on; access_log /var/log/nginx-download.access_log download; } location ~* \.(jpg|jpeg|gif)$ { root /spool/www; access_log off; expires 30d; } } }
上述模板来自于 Nginx 官方示例
Nginx 模块说明 核心模块
控制整个 Nginx 的基本功能和程序配置
主模块
user www www; worker_processes 2; error_log /var/log/nginx-error.log info; ...
user user [group]:定义运行 Nginx 的用户和其所在组,该项默认 ser nobody nobody 可以使用默认配置。在 linux 系统上,一切皆文件,每个文件都有其访问权限,如果访问了权限外的文件,客户端会接受到服务端 403 错误。不设置 group 则组名与用户名一致。 worker_processes number | auto:工作进程数,一般与 cpu 核心数保持一致,可以设置为 auto,Nginx 可以自动调整为最佳个数。 error_log file [level]:日志存放目录,level 日志输出等级 pid file :进程 id 存储位置 worker_cpu_affinity:工作进程与 cpu 绑定
worker_processes 4; \\1表示对应cpu核心工作 worker_cpu_affinity 0001 0010 0100 1000;
worker_rlimit_nofile number:一个工作进程可打开的最大文件数,设置该值后 worker_connections 不能超过该值,理论上这个值是最多打开文件数(ulimit -n)与 Nginx 工作进程相除。 event 模块
events { use kqueue; worker_connections 2048; } ...
use method:事件模型,Linux 系统下设置有效,默认会找出最适合系统的事件模型,常用 use epoll worker_connections number:设置最大并发连接数,该值不仅仅是与客户端连接。通过 worker_connections 和 worker_proceses 可以计算出 max_clients = worker_processes * worker_connections,作为反向代理,max_clients = worker_processes * worker_connections/4。 multi_accept on | off:关闭时一个进程只接受一个连接,开启时尽可能接受连接,连接放进监听队列 http 模块
配置 http 服务相关
include:定义文件扩展名,该文件包含类型映射表 default_type :默认解析类型 limit_req_zone key zone=name:size rate=rate:如limit_req_zone $binary_remote_addr zone=limit:10m rate=1r/s;,10m 缓存,每秒仅允许统一 ip 访问一次 超出频率或者缓存超出则返回 503 sendfile on | off:开启后 Nginx 使用零拷贝的方式输出文件,一般设置为 on,对于磁盘 IO 重负债应用时可以设置 off tcp_nopush on | off:激活 tcp_nopush 参数可以允许把 http response header 和文件的开始放在一个文件里发布或者发送一个满包的文件,传输大量数据有利,只有 sendfile 起效是才有作用 tcp_nodelay on | off:启用后会禁用 Nagle 算法,尽快发送数据,Nginx 只会针对 keep-alive 状态的起作用,该选项看似与tcp_nopush矛盾,但同时启用产生的效果是先填满包在尽快发送 keepalive_timeout:连接超时时间 upstream 模块
upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; #server 192.168.1.116 backup; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } server { location / { proxy_pass http://backend; } }
该模块主要完成负载均衡功能
erver address [parameters] weight:代表权重,权重越高被分配的记录越大 max_conns:限制最大活动连接数,默认为 0,表示没有限制 fail_timeout=time:与服务器通信失败时长,默认 10 s max_fails:设置在 fail_timeout 内连接到主机的失败次数,超过该次数则认为该主机不可用 server 模块
server { server_name ~^(www\.)?(.+)$; location / { root /sites/$2; } }
listen:可设置为只是监听 ip 地址,或者端口,也可以是两者都有,也可以是主机名称
listen 127.0.0.1:8000; listen 127.0.0.1; listen 8000; listen *:8000; listen localhost:8000;
erver_name name ...:主机名称,可以使用通配符,多个主机空格隔开 location 模块
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
该模块完成对请求分类处理
= 开头表示精确匹配
单个 / 表示通用匹配任何请求都能匹配到
^~ 表示匹配 url 路径
~ 表示区分大小写的正则匹配
~* 表示不区分大小写的正则匹配
!~ 表示区分大小写的正则不匹配
!~* 表示不区分大小写的正则不匹配
roxy_pass URL:代理服务器地址
roxy_set_header field value:代理请求头设置,Nginx 可以重新定义或附加请求表头
//主机名称 proxy_set_header Host $host; //真实请求 ip,如果不存在该字段,则该$proxy_add_x_forwarded_for变量等于该$remote_addr变量。 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr;
- 上一篇:Fedora中显示windows下的文件
- 下一篇:nginxssl证书