1. nginx配置文件组成
- 全局块
默认的配置文件开始到events块之间的部分内容,配置运行nginx服务器的用户、允许生成的worker process数、Nginx进程pid存放路径、日志存放路径和类型,配置文件的引入。 - events块
影响nginx和用户的网络连接,开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪一种事件驱动模型处理连接请求、
配置每个worker process同时支持的最大连接数。 - http块
代理、缓存和日志定义绝大多数功能和第三方模块的配置都可以放在这个模块
。
可以包含自己的全局块
,也可以包含server块,server块可以包含localtion块。配置的指令包含文件引入、MIME-Type定义,日志文件定义、是否使用sendfile传输文件、连接超时时间、单连接请求上限等
。 - server块
指令作用域仅仅在自身块可见,server块可以包含 localtion块,常见的配置项是本虚拟主机监听配置和本虚拟主机的名称或者IP配置
。 - localtion块
location块是server块的一个指令,主要用来基于nginx服务器收到的请求字符串(server_name/uri-string),对虚拟主机名称之外的字符串进行匹配并进行特殊处理。数据缓存、地址定向、应答控制功能又该部分完成
。
2.配置文件案例
user nginx; #设置所有可以运行nginx的用户为nginx,不限制可以注释或者设置为nobody
worker_processes 8;#nginx工作进程数,也可以设置为auto
worker_rlimit_nofile 1000000;
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;
error_log /var/log/nginx/error.log; #错误日志存放的路径
pid /var/run/nginx.pid; #nginx进程id存放的文件
#加载nginx模块的
include /usr/share/nginx/modules/*.conf;
#events块
events {
use epoll;#所选择的事件驱动模型`select,poll,kqueue,epoll等等`
worker_connections 8096;#每一个worker process同时开启的最大连接数,不仅仅包括和前端用户的连接,而是包含所有可能的链接。
accept_mutex on; #开启的时候对多个nginx进程连接序列化,防止多个进程对连接争抢,解决`惊群现象`。默认是on
multi_accept on; #允许同时接收多个网络连接,默认是off
}
http {
#定义日志文件的格式,只能出现在http块
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format fail2ban '$remote_addr - $remote_user [$time_local] "$request"';
#访问日志
access_log /var/log/nginx/access.log main buffer=512k;
client_header_buffer_size 8k;
client_header_timeout 10;
client_body_buffer_size 256k;
client_body_timeout 10;
large_client_header_buffers 4 8k;
client_max_body_size 20m;
send_timeout 10;
#用户建立连接后,nginx服务器保持连接打开的时间,
# keepalive timeout [header_timeout]服务器端保持的
#服务器端保持连接的时间设置为120s,发送给用户端应答报文头部的超时时间为100秒
#keepalive_timeout 120s 100s;
#keepalive_timeout 30;
# 通过某一个连接向nginx服务器发送请求的次数
keepalive_requests 5000;
reset_timedout_connection on;
proxy_connect_timeout 60;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffering off;
proxy_buffer_size 128k;
proxy_buffers 64 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 128m;
#proxy_cache_path /home/nginx_cache levels=1:2 keys_zone=nginx_cache:128m max_size=2g inactive=5m;
#proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
#proxy_cache_valid 200 302 5m;
#proxy_cache_valid 404 1m;
fastcgi_connect_timeout 15;
fastcgi_send_timeout 60;
fastcgi_read_timeout 60;
fastcgi_buffer_size 64k;
fastcgi_buffers 32 64k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 512k;
### 配置允许用sendfile方式传输文件
sendfile on;
#sendfile_max_chunk_size 10000; #每个worker process每次调用sendfile传输最大不能超过这个值,默认是0表示无限制,可以在server、http、location模块配置。
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
#定义MIME-Type,用于nginx根据mime-type识别资源。
include /etc/nginx/mime.types;
#配置用于处理前端请求的mime-type,此指令可以在http,localtion,server块里面配置
default_type application/octet-stream;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
limit_req_zone $binary_remote_addr zone=allips:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# limit_req_zone $binary_remote_addr.$cookie_PHPSESSID zone=addr_session:50m rate=15r/m;
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf; #引入其他配置文件
}
server_name 支持基于IP的虚拟主机配置
linux支持IP别名增加,
ifconfg eth1 xxx.xxx.xxx.xxx netmask 255.255.255.0 up
3. 常见配置块
3.1location块的配置
语法结构
location [= | ~|~*|^~] uri {}
- =,用于标准的uri前面,要求请求字符串与uri严格匹配,匹配成功就停止继续向下搜索,并立即处理此请求。
- ~,uri包含正则表达式,并区分大小写
- ~*,包含正则表达式且不区分大小写。
nginx对uri里面编码的字符串会兼容处理,%20表示空格,直接写空格会匹配到。
3.2配置请求根目录:root
root path;#path指令可以设置除了$document_root,realpath_root外的大多数预设服务器变量。
root可以在http块、server块、location块配置。
#当收到/data/index.html的时候,会在/localtiontest1/data下找到index.html响应请求。
location /data/
{
root /localtiontest1;
}
3.3更改location的URI
alias path;
path是修改后的根路径,变量取值和root命令的path参数取值相同。
location ~ ^/data/(.+\.(html|htm))$
{
alias /locationtest1/other/$1;
}
当location收到/data/index.html请求时,服务器从/locationtest1/other下寻找index.html并响应请求。已经不在/data目录下寻找,该指令和root能起到相同的效果
3.4配置网站的首页
location ~ ^/data/(.+)/web/ $
{
index index.$1.html index.html;
}
3.5设置错误界面
error_page code ...[=[response]] uri
- code 表示要处理的http错误代码
- response,可选项,要将code指定的错误码转换为新的错误代码response
- uri 错误的页面的路径或者网站地址,
如果为路径则为nginx安装目录下html目录为根目录的相对路径
,如果为网址则nginx会直接访问该网址获取错误界面,返回给客户端。
error_page 410=301 /empty.gif
error_page之后重定向
#不用网站根目录下的404.html,用/myserver/errorpages/404.html
location /404.html
{
root /myserver/errorpages/
}
3.6基于IP配置nginx的访问权限
由nginx_http_access_module
模块提供控制。
格式:allow address |CIDR | all;
address:表示允许访问的客户端IP,只支持单个IP
CIDR: 通过子网掩码的形式确定的地址,比如 202.80.18.23/25 ,前面25位表示网络地址,后的表示主机地址
all: 表示全部允许
deny address | CIDR | all
这两个指令可以在http块、server块、location块中配置。解析从上到下解析,遇到匹配就不在继续匹配。
3.7基于密码配置nginx访问权限
auth_basic string | off; #string表示开启,off表示关闭
auth_basic_user_file file; #用于设置包含用户名和密码信息文件路径,
密码文件支持明文或者密码加密的文件
name1:password1:comment
采用加密的密码可以用linux指令
htpasswd -c -d /nginx/conf/pass_file username
网友评论