时间:2023-07-01 21:09:02 | 来源:网站运营
时间:2023-07-01 21:09:02 来源:网站运营
Nginx使用:#启动子进程程序默认用户#user nobody;#一个主进程和多个工作进程。工作进程是单进程的,且不需要特殊授权即可运行;这里定义的是工作进程数量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 { #设定mime类型,类型由mime.type文件定义 include mime.types; # 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"'; #$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址; #$remote_user:用来记录客户端用户名称; #$time_local: 用来记录访问时间与时区; #$request: 用来记录请求的url与http协议; #$status: 用来记录请求状态;成功是200, #$body_bytes_sent :记录发送给客户端文件主体内容大小; #$http_referer:用来记录从那个页面链接访问过来的; #$http_user_agent:记录客户浏览器的相关信息; #全局访问日志路径 #access_log logs/access.log main; #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。 sendfile on; #此选项可以减少网络报文段的数量 #tcp_nopush on; #长连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; #开启压缩 #gzip on; #配置虚拟主机 server { #虚拟主机使用的端口 listen 80; #虚拟主机域名 server_name localhost; #虚拟主机支持的字符集 #charset koi8-r; #虚拟主机的访问日志路径 #access_log logs/host.access.log main; #定义web根路径 location / { #根目录路径 root html; #索引页 index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #根据错误码 返回对应的页面 error_page 500 502 503 504 /50x.html; #定义页面路径 location = /50x.html { root html; } #定义反向代理服务器 数据服务器是lamp模型 # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ /.php$ { # proxy_pass http://127.0.0.1; #} #定义PHP为本机服务的模型 # 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 # #拒绝nginx DR目录及子目录下的.htaccess文件访问 #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的配置方案 # 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; # } #}}
server { listen 80; server_name localhost; location / { root html; index index.html index.htm; #支持目录浏览 autoindex on; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }}
[root@localhost ~]# mkdir /usr/local/nginx/html/a[root@localhost html]# vim /usr/local/nginx/conf/nginx.conflocation /a { autoindex on; deny 192.168.11.116; allow all; #基于客户端IP做过滤,符合条件的允许访问,不符合的禁止访问 }[root@localhost ~]# killall -s HUP nginx
[root@localhost ~]# mkdir /usr/local/nginx/html/c[root@localhost html]# vim /usr/local/nginx/conf/nginx.conflocation /c { auth_basic "登陆验证"; auth_basic_user_file /etc/nginx/htpasswd;}[root@localhost ~]# killall -s HUP nginx
log_format格式变量: $remote_addr #记录访问网站的客户端地址 $remote_user #远程客户端用户名 $time_local #记录访问时间与时区 $request #用户的http请求起始行信息 $status #http状态码,记录请求返回的状态码,例如:200、301、404等 $body_bytes_sent #服务器发送给客户端的响应body字节数 $http_referer #记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。 $http_user_agent #记录客户端访问信息,例如:浏览器、手机客户端等 $http_x_forwarded_for #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置
自定义一个json格式的访问日志log_format main_json '{ "@timestamp":"$time_local", "client_ip":"$remote_addr", "request":"$request", "status":"$status", "bytes":"$body_bytes_sent", "x_forwarded":"$http_x_forwarded_for", "referer":"$http_referer" }'; access_log logs/access_json.log main_json;#重新启动nginx服务查看访问日志[root@localhost~]# tail -f /usr/local/nginx/logs/access_json.log
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conflocation / { root html; index index.html index.htm; } #定义访问资源为图片类型的location ~* /.(gif|jpg|png|bmp)$ { #定义白名单 none代表直接访问的,blocked表示被防火墙标记过的请求最后一个是网址 valid_referers none blocked *.baidu.com; #如果不在白名单中则返回403 if ($invalid_referer) { return 403; } }[root@localhost ~]# killall -s HUP nginx #在另外一台主机写一个盗链测试页面dnf install httpd -yvim /var/www/html/index.html<html> <head> <title>ce shi</title> <body> <a href="http://192.168.11.16/1.png">daolian</a> </body> </head></html>systemctl restart httpd
server { listen 192.168.11.251:80; location / { root html/web1; index index.html index.htm index.php; }}server { listen 192.168.11.252:80;location / { root html/web2; index index.html index.htm; }}
基于端口server { listen 80; #server_name www.abc.com; location / { root html/web1; index index.html index.htm index.php; }}server { listen 8080; #server_name www.abc.com; location / { root html/web2; index index.html index.htm; }}
基于域名server { listen 80; server_name web1.a.com; location / { root html/web1; index index.html index.htm index.php; }}server { listen 80; server_name web2.b.com; location / { root html/web2; index index.html index.htm; }}
location / {index index.php index.html index.htm; #定义首页索引文件的名称proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器列表}
反向代理优化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; #缓冲区代理缓冲用户端请求的最大字节数,proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
算法思想是: 水(请求)从上方倒入水桶,从水桶下方流出(被处理); 来不及流出的水存在水桶中(缓冲),以固定速率流出; 水桶满后水溢出(丢弃)。 这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。 相比漏桶算法,令牌桶算法不同之处在于它不但有一只“桶”,还有个队列,这个桶是用来存放令牌的,队列才是用来存放请求的。
#基于IP对下载速率做限制 限制每秒处理1次请求,对突发超过5个以后的请求放入缓存区 http { limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s; server { location /abc { limit_req zone=test burst=5 nodelay; }}limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s;第一个参数:$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。第二个参数:zone=test:10m表示生成一个大小为10M,名字为test的内存区域,用来存储访问的频次信息。第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。limit_req zone=test burst=5 nodelay;第一个参数:zone=test 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。重启nginx服务测试机[root@slave tmp]# for i in `seq 1 10`; do (wget http://192.168.11.16/abc/bigfile -P /tmp) & done[root@slave tmp]# killall wget 会出现不同的状态,有的是以退出有的是已终止
2)限制并发连接数#基于IP做连接限制 限制同一IP并发为1limit_conn_zone $binary_remote_addr zone=addr:10m;server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /abc { limit_conn addr 1; } }}重启nginx服务测试机[root@slave tmp]# for i in `seq 1 10`; do (wget http://192.168.11.16/abc/bigfile -P /tmp) & done#退出了9个只能开启一个
3)限制下载速度下载速度为100kserver { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /abc { limit_rate 100k; } }}重启nginx服务测试机使用wget命令测试
4)综合案例http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65;#基于IP做连接限制 限制同一IP并发为1 下载速度为100Klimit_conn_zone $binary_remote_addr zone=addr:10m;#基于IP对下载速率做限制 限制每秒处理1次请求,对突发超过5个以后的请求放入缓存区 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /abc { limit_req zone=one burst=5 nodelay; limit_conn addr 4; limit_rate 100k; } }}
将http://www.a.com 重写为 http://www.a.com/hellolocation / { set $name hello; rewrite ^(.*)$ http://www.a.com/$name; }重启nginx服务测试机打开浏览器可以看到页面跳转
if 指令 负责判断location / { root html; index index.html index.htm; if ($http_user_agent ~* 'Firefox') { return 403; } }重启nginx客户机打开火狐浏览器测试,看看能否看到403
return 指令 定义返回数据location / { root html; index index.html index.htm; if ($http_user_agent ~* 'Firefox') { return 403; } }
域名跳转www.a.com 重写为 www.b.comserver { listen 80; server_name www.a.com; location / { rewrite ^/$ http://www.b.com permanent; }}
redirect标志:临时重定向域名跳转www.a.com 重写为 www.b.comserver { listen 80; server_name www.a.com; location / { rewrite ^/$ http://www.b.com redirect; }}
break标志: 类似临时重定向域名跳转www.a.com 重写为 www.b.comserver { listen 80; server_name www.a.com; location / { rewrite ^/$ http://www.b.com break; }}
last标志:如果是firefox浏览器 就将 http://192.168.11.16/$URI 重写为 http://192.168.11.16/firefox/$URI实现 步骤1)URL重写2)请求转给本机locationlocation / {.....if ($http_user_agent ~* 'firefox'){ #^ 以什么开头 ^a #$ 以什么结尾 c$ #. 除了回车以外的任意一个字符 #* 前面的字符可以出现多次或者不出现 #更多内容看正则表达式 rewrite ^(.*)$ /firefox/$1 last; } location /firefox { root html ; index index.html; }}[root@localhost html]# pwd/usr/local/nginx/html[root@localhost html]# mkdir firefox[root@localhost html]# echo firefox > firefox/index.html[root@localhost html]# killall nginx[root@localhost html]# /usr/local/nginx/sbin/nginx 客户机浏览器测试
启动工作进程数量worker_processes 4;#指定运行的核的编号,采用掩码的方式设置编号worker_cpu_affinity 0001 0010 0100 1000;events {单个工作进程维护的请求队列长度 worker_connections 1024;}
keepalive_timeout 0; 0代表关闭#keepalive_timeout 100;#keepalive_requests 8192;
gzip on;gzip_proxied any;gzip_min_length 1k;gzip_buffers 4 8k;gzip_comp_level 6;gzip_types text/plain text/css application/x-javascript application/javascript application/xml;# 开启gzip gzip off; # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩 gzip_min_length 1k; # gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明 gzip_comp_level 1; # 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml; # 是否在http header中添加Vary: Accept-Encoding,建议开启 gzip_vary on; # 禁用IE 6 gzip gzip_disable "MSIE [1-6]/."; # 设置压缩所需要的缓冲区大小 gzip_buffers 32 4k; # 设置gzip压缩针对的HTTP协议版本 gzip_http_version 1.0;
expires指令:开启缓存并指定静态缓存时间location ~* /.(png|gif)$ { expires 1h; }
[root@client ~]# dnf -y install nginx php* mariadb-server mariadb -y
[root@client ~]# vim /etc/php-fpm.d/www.conf user = nginxgroup = nginx#php-fpm服务默认以apache用户启动,将启动用户身份修改nginx
[root@client ~]# systemctl restart nginx.service php-fpm.service mariadb.service
[root@client ~]# echo "<?php phpinfo();?>" >> /usr/share/nginx/html/index.php#系统自带的nginx的页面文件存放在/usr/share/nginx/html/目录中
[root@client ~]# mysqladmin -u root password 123456[root@client ~]# mysql -u root -pEnter password: MariaDB [(none)]> create database wordpress charset=utf8;Query OK, 1 row affected (0.001 sec)MariaDB [(none)]> quitBye
[root@client ~]# cd /usr/share/nginx/html/[root@client html]# rm -fr *#####删除nginx自带的页面文件,以及刚才测试生成的php页面[root@client ~]# unzip latest-zh_CN.zip [root@client ~]# cd wordpress/[root@client wordpress]# mv * /usr/share/nginx/html/####将wordpress文件移动到nginx页面文件存放的目录[root@client wordpress]# cd /usr/share/nginx/html/[root@client html]# chown -R nginx.nginx *###文件的默认所有者是root,为了避免权限的问题,将所有者改为nginx
复制提示页面内容,按照要求手工创建wp-config.php文件并将内容粘贴[root@client html]# vim /usr/share/nginx/html/wp-config.php
关键词:使用