**Nginx编译安装**
apt install libgd-dev
apt install libgeoip-dev
apt-get install zlib1g-dev
apt install openssl libssl-dev
apt install libpcre3-dev
apt install libpcre3
apt install openssl-devel pcre-devel
apt install gcc
apt install libgd-dev
./configure --prefix=/apps/nginx --with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_gunzip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
--prefix=/apps/nginx 安装路径
--with-http_ssl_module \ https模块
--with-http_v2_module \ http版本
--with-http_realip_module \ 当本机的nginx处于一个反向代理的后端时获取到真实的用户IP
--with-http_addition_module \ 模块是一个过滤器,可在响应之前和之后添加文本
--with-http_image_filter_module \ 图片文件
--with-http_geoip_module \ 读取IP所在地域信息。
--with-http_gunzip_module \ 解压缩
--with-http_stub_status_module \ 查看nginx状态信息
--with-http_gzip_static_module \ 压缩
--with-pcre \ 编译需要
--with-stream \ 负载均衡
--with-stream_ssl_module \ 支持https的负载均衡
--with-stream_realip_module
**nginx默认配置文件优化**
#user nobody;
worker_processes auto;
#绑定CPU
worker_cpu_affinity auto
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
#单个进程最大并发连接数
worker_connections 1024;
use epoll;
#同一时刻只有一个请求避免多个睡眠的work进程被唤醒。
accept_mutex on;
#同时接受所有新的网络连接
multi_accept on;
}
#最大打开文件数
worker_rlimit_nofile 65535;
#关闭守护进程 docker 前台执行
daemon off;
#daemon on;
#只使用master 进程作工作进程 测试使用
#master_process on|off
http {
#导入支持的文件类型
include mime.types;
#超出mime.types 文件设置后,设置默认的类型,会提示下载不匹配的类型文件
default_type application/octet-stream;
#可以设置多个log配置
#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 app ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
#调用log配置
#access_log logs/access.log app;
#实现文件零拷贝,静态文件用
sendfile on;
#在开启了sendfile的情况下,合并请求后统一发送给客户端,节省网络带宽,会产生延迟。
#tcp_nopush on;
#在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认on时,不延迟发送,立即发送用户响应报文,建议off
#tcp_nodelay off;
#回话保持时间,第二个参数使客户端访问时可以看到设置的超时时间
#keepalive_timeout 0;
keepalive_timeout 65 65;
#开始文件压缩,降低消耗
#gzip on;
server {
listen 80;
#正则表达式匹配访问域名,如果没有匹配到全部使用www.admin.com 返回
server_name localhost www.(abc\d+)\.admin.com$ www.admin.com;
#设置编码格式
#charset utf-8;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
#设置报错访问页面,可以加入404 403 等等
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
error_page 404 403 /40x.html;
location = /40x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache‘s document root
# concurs with nginx‘s one
#
#限制访问
location ~ /passwd.html {
deny all;
}
#location ~ /\.ht {
# deny all;
#}
}
root:指定web的家?录,在定义location的时候,?件的绝对路径等于 root+location
alias:定义路径别名,会把访问的路径重新定义到其指定的路径
**语法规则: location [=|~|~*|^~] /uri/ { … }**
= #?于标准uri前,需要请求字串与uri精确匹配,如果匹配成功就停?向下匹配并?即处理请求。
~ #?于标准uri前,表?包含正则表达式并且区分??写,并且匹配
!~ #?于标准uri前,表?包含正则表达式并且区分??写,并且不匹配
~* #?于标准uri前,表?包含正则表达式并且不区分?写,并且匹配
!~* #?于标准uri前,表?包含正则表达式并且不区分??写,并且不匹配
^~ #?于标准uri前,表?包含正则表达式并且匹配以什么开头
$ #?于标准uri前,表?包含正则表达式并且匹配以什么结尾
\ #?于标准uri前,表?包含正则表达式并且转义字符。可以转. * ?等
* #?于标准uri前,表?包含正则表达式并且代表任意?度的任意字符
**Nginx四层访问控制**
location /about {
alias /data/nginx/html/pc;
index index.html;
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
#IPV6
allow 2001:0db8::/32;
deny all;
}
**Nginx账户认证功能**
centos:
yum install httpd-tools -y
ubuntu:
apt install apache2-utils
创建认证用户文件和用户
htpasswd -cbm /usr/local/nginx/conf/.htpasswd user1 123456
Adding password for user user1
htpasswd -bm /usr/local/nginx/conf/.htpasswd user2 123456
Adding password for user user2
/usr/local/nginx/conf/pc.conf
locathon = /login/ {
root /usr/local/nginx/html/pc;
index index.html;
auth_basic "login password";
auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
}
**自定义错误页面**
listen 80;
server_name www.admin.net;
error_page 500 502 503 504 404 /error.html;
location = /error.html {
root html;
}
**自定义访问日志**
listen 80;
server_name www.admin.net;
error_page 500 502 503 504 404 /error.html;
access_log /usr/local/nginx/logs/www-admin-net_access.log;
error_log /usr/local/nginx/logs/www-admin-net_error.log;
location = /error.html {
root html;
}
**监测访问文件是否存在**
location /about {
root /usr/local/nginx/html/pc;
#alias /usr/local/nginx/html/pc;
index index.html;
#try_files $uri /about/defaut.html;
#try_files $uri $uri/index.html $uri.html /about/default.html;
try_files $uri $uri/index.html $uri.html = 489;
}
**长连接配置**
#设置在一个长连接上可以服务的最大请求数目。当达到最大请求数目并结束服务后,连接被关闭。
keepalive_requests 3;
#开启长连接后,返回客户端的回话保持时间为65秒,单次长连接累计请求书达到指定次数请求或65秒回被断开
#后面的65位客户端应答报文中显示的超时时间(可以不设置第二个参数)
keepalive_timeout 65 65;
**作为下载服务器配置**
location /download {
#自动索引功能
autoindex on;
#计算文件确切大小(单位bytes),off只显示大概大小(单位kb、mb、gb)
autoindex_exact_size on;
#显示本机时间而非GMT时间
autoindex_localtime on;
root /data/nginx/html/pc;
#限制响应给客户端的传输速率,单位是bytes/second,默认0标识不限速
limit_rate 10k;
}
**作为上传服务器**
#设置允许客户端上传单个文件的最大值,默认值为1M;
client_max_body_size 1m;
#用于接收每个客户端请求报文的body不分缓冲区大小,默认16k;超过此大小将被暂存到磁盘上的由client_body_temp_path指令所定义的位置
client_body_buffer_size size;
#设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量,目录名为16进制数字,使用hash之后往前截取1位,2位,2位作为文件名;
client_body_temp_path path [level1 [level2 [level3]]]
md5sum /data/nginx/html/pc/index.html
95f6f65f498c74938064851b1bb 96 3d 4 /data/nginx/html/pc/index.html
1级?录占1位16进制,即2^4=16个?录 0-f
2级?录占2位16进制,即2^8=256个?录 00-ff
3级?录占2位16进制,即2^8=256个?录 00-ff
配置?例:
client_max_body_size 10m;
client_body_buffer_size 16k;
#reload Nginx会?动创建temp?录
client_body_temp_path /apps/nginx/temp 1 2 2;
原文:https://www.cnblogs.com/sqbk/p/14136023.html