nginx配置
Nginx
删除带#的行
sed -i "/#/d" nginx.conf
有空行的也删除
sed -i "/^$/d" nginx.conf
安装:
mv nginx-1.15.5.tar.gz /usr/src/ cd /usr/src/ tar -zxvf nginx-1.15.5.tar.gz cd nginx-1.15.5/
安装环境:yum install gcc pcre-devel zlib zlib-devel
检查环境,是否满足安装条件以及依赖解决
指定软件安装位置./configure --prefix=/usr/local/nginx
目录:
各个文件以及目录
nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx modules path: "/usr/local/nginx/modules" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
启动Nginx服务:
验证:
lsof -i :80
netstat -ntpl
创建用户
useradd -s /sbin/nologin /r www
nginx重新加载配置文件
killall -s HUP nginx
或
nginx -s reload
目录访问控制
#配置目录访问
#相对网站根目录,/即root目录,root目录为/usr/local/nginx/html
#访问控制,只允许本机访问a目录,其他机器拒接
location /a {
allow 127.0.0.1;
deny all;
#设置返回
return 404;
}
创建用户登录密码文件
工具来源于httpd-tools
[root@web01 html]# htpasswd -c /etc/nginx/htpasswd user1
New password:
Re-type new password:
Adding password for user user1
[root@web01 html]#
只有拥有用户名和密码的用户才能访问
#目录用户验证:任何人都可以访问,但需要提供用户名和密码
location /b {
auth_basic "登陆验证";
auth_basic_user_file /etc/nginx/htpasswd;
}
放盗链配置
放置其他站点连接本网站上的数据,在server中配置
#针对全局做防盗连配置
#location ~* \.(png|gif|bmp)$
#针对c文件夹做防盗连配置
location /c {
#正常匹配,none标示没有,blocked标示防火墙,域名标示指定域名
valid_referers none blocked *.self.com;
#没有匹配以上,则直接返回403
if ($invalid_referer){
return 403;
}
}
虚拟主机
一个web服务器软件默认情况下只能发布一个web,因为web发布需要三个条件(ip,port,domainName)
虚拟主机:把一台物理服务器划分为多个“虚拟”的服务器,每一个虚拟主机都可以有独立的域名和独立的目录
基于IP
- 需要多个ip
- DocumentRoot必须存在
http {
server {
listen 10.111.1.31:80;
server_name www.web.com;
location / {
root html/web1;
index index.html index.htm;
}
}
server {
listen 10.111.1.32:80;
server_name www.web.com;
location / {
root html/web2;
index index.html index.htm;
}
}
}
基于端口
http {
server {
listen 10.111.1.32:80;
location / {
root html/web1;
index index.html index.htm;
}
}
server {
listen 10.111.1.32:8080;
location / {
root html/web2;
index index.html index.htm;
}
}
}
基于域名
一个网站必须有一个域名
http {
server {
listen 80;
server_name www.abc.com;
location / {
root html/web1;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.cbd.com;
location / {
root html/web2;
index index.html index.htm;
}
}
}
完整配置文件
#全局配置,指定用户组,pid存放位置,日志路径,worker process数量
#启动nginx子进程默认用户
#user nobody;
#最多启动的子进程(工作进程,单进程多线程)数量,一般数量为CPU内核数
worker_processes 1;
#全局错误日志的位置以及日志格式
#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;
}
#http服务器设置
http {
#嵌套多个server,配置代理,缓存,日志,三方模块等
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#自定义日志格式
log_format baism_01 '[$time_local] $remote_addr "$request" $status';
#定义json格式的日志
log_format main_json '{
"timestamp":"$time_local",
"client_ip":"$remote_addr",
"status":"$status",
}';
#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 logs/access.log main;
#指定nginx是否调用sendfile函数来输出文件,对于普通应用必须为on
sendfile on;
\
#tcp_nopush on;
#长连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
#压缩输出
#gzip on;
#一个server发布一个网站,即一个server就是一个虚拟主机,只有一个server的时候就是默认网站
server {
#网站监听端口
listen 80;
#网站域名
server_name localhost;
#虚拟机支持的字符集
#charset utf-8;
#虚拟主机的访问日志路径
#access_log logs/host.access.log main;
#使用自定义日志格式
access_log logs/baism_01.access.log baism_01;
#定义web根路径
location / {
#请求路由以及各页面处理情况
root html;
index index.html index.htm;
}
#配置目录访问
#相对网站根目录,/即root目录,root目录为/usr/local/nginx/html
#访问控制,只允许本机访问a目录,其他机器拒接
location /a {
allow 127.0.0.1;
deny all;
#设置返回
return 404;
}
#目录用户验证:任何人都可以访问,但需要提供用户名和密码
location /b {
auth_basic "登陆验证";
auth_basic_user_file /etc/nginx/htpasswd;
}
#针对全局做防盗连配置
#location ~* \.(png|gif|bmp)$
#针对c文件夹做防盗连配置
location /c {
#正常匹配,none标示没有,blocked标示防火墙,域名标示指定域名
valid_referers none blocked *.self.com;
#没有匹配以上,则直接返回403
if ($invalid_referer){
return 403;
}
}
"nginx.conf" 189L, 5059C written
[root@web01 conf]# cat nginx.conf
#全局配置,指定用户组,pid存放位置,日志路径,worker process数量
#启动nginx子进程默认用户
#user nobody;
#最多启动的子进程(工作进程,单进程多线程)数量,一般数量为CPU内核数
worker_processes 1;
#全局错误日志的位置以及日志格式
#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;
}
#http服务器设置
http {
#嵌套多个server,配置代理,缓存,日志,三方模块等
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#自定义日志格式
log_format baism_01 '[$time_local] $remote_addr "$request" $status';
#定义json格式的日志
log_format main_json '{
"timestamp":"$time_local",
"client_ip":"$remote_addr",
"status":"$status",
}';
#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 logs/access.log main;
#指定nginx是否调用sendfile函数来输出文件,对于普通应用必须为on
sendfile on;
#tcp_nopush on;
#长连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
#压缩输出
#gzip on;
#一个server发布一个网站,即一个server就是一个虚拟主机,只有一个server的时候就是默认网站
server {
#网站监听端口
listen 80;
#网站域名
server_name localhost;
#虚拟机支持的字符集
#charset utf-8;
#虚拟主机的访问日志路径
#access_log logs/host.access.log main;
#使用自定义日志格式
access_log logs/baism_01.access.log baism_01;
#定义web根路径
location / {
#请求路由以及各页面处理情况
root html;
index index.html index.htm;
}
#配置目录访问
#相对网站根目录,/即root目录,root目录为/usr/local/nginx/html
#访问控制,只允许本机访问a目录,其他机器拒接
location /a {
allow 127.0.0.1;
deny all;
#设置返回
return 404;
}
#目录用户验证:任何人都可以访问,但需要提供用户名和密码
location /b {
auth_basic "登陆验证";
auth_basic_user_file /etc/nginx/htpasswd;
}
#针对全局做防盗连配置
#location ~* \.(png|gif|bmp)$
#针对c文件夹做防盗连配置
location /c {
#正常匹配,none标示没有,blocked标示防火墙,域名标示指定域名
valid_referers none blocked *.self.com;
#没有匹配以上,则直接返回403
if ($invalid_referer){
return 403;
}
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#错误码返回错误页面,路径相对于localtion路径
error_page 500 502 503 504 /50x.html;
location = /50x.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 ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
Nginx反向代理
常规代理服务器优化
代理用户正向代理,代理服务器即为反向代理
堡垒机场景
只有一个IP,发布内部多台服务器场景
缓存场景,静态缓存服务器,加载快,后端服务器压力减小
location / {
proxy_pass http://127.0.0.1;
#添加代理主机头,添加后后端服务器可以通过相应字段提取
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
限速
给定时间段内能够产生的HTTP请求数
限制请求速率,一般限流是用在保护上有应用服务器不被在同一时刻的大量用户请求湮灭
放置DDOS攻击
保护IO
案例一:
案例二:
支持文件上传已经进度获取