nginx常用功能,网站、反向代理、四层代理、优化方法、python动态页面解析。

nginx的常用功能:

网站功能

nginx配置文件的语法:

指令 参数 分号结尾

1. 用户认证

auth_basic "xxx" ;

auth_basic_user-file "/path/for/pass" ;

htpasswd -c /path/for/pass username1

htpasswd /path/for/pass username2

2. 基于端口的虚拟主机

http{

server {

listen 8000 ; # 监听端口号

server_name __; # 虚拟主机域名

root html_a # 网页文件根目录

index index.html # 默认页

}

server {

listen 8080 ;

server_name __;

root html_b;

index index.html;

}

}

3. 安全加密网站

openssl genrsa 生成私钥

openssl req -x509 -key 请求生成公钥(根据私钥),公钥也叫证书

公钥相当于锁

私钥相当于钥匙

4. lnmp动态网站

nginx默认不支持动态网站

需要与php和数据库结合,可以支持

l: linux

n: nginx

m: mariadb数据库客户端

mariadb-server数据库服务端

mariadb-devel扩展包

因为在本机部署,属于既是客户端,又是服务端

p: php动态网站的语言工具,但不能自动解析,所以需要php-fpm

php-fpm 解析(翻译)php的动态页面

php-mysqlnd 网站跑起来是需要存数据的,安装之后程序可以自动调用数据库

配置的核心就是修改两个文件:

一个是php-fpm的配置文件/etc/php-fpm.d/www.conf

第38行下方添加一行:listen 127.0.0.1:9000

第二个是nginx的配置文件,把location ~ /.php$ 这个块放开

5. 地址重写

rewrite /a.html /b.html; # 访问包含a.html的路径时,跳转到b.html,其中a.html可以不存在,b.html要存在

rewrite ^/a\.html$ /b.html; # 严格匹配a.html,^匹配开头,\转义符,$匹配结尾

rewrite ^/a\.html$ /b.html redirect/permanent;

# redirect临时重定向,浏览器地址栏会变为b.html,状态码302;permanent永久重定向,状态码301

指令 参数1 参数2 选项

rewrite /(.*) http://www.example.com/$1; # 跳转到新域名的相同路径

比如访问192.168.1.3/a.html,就会跳转到http://www.example.com/a.html

适用于企业换域名了的场景

if ($http_user_agent ~* firefox) { # “~”正则匹配,“*”忽略大小写

rewrite (.*) /firefox/$1;

} # 根据用户的浏览器代理,推送不同的页面

location是为了匹配用户的路径,如果访问什么路径,就提供什么服务

location的作用,有点像if判断

反向代理(网站集群)

不亲自提供服务,指挥后端服务器服务,

搭建集群的目的是负载均衡

反向代理、调度器、代理服务器,都是一个意思

是为后端服务器服务的,服务什么呢,就是帮他们合理的分配任务,所以对于客户端来讲,是反向代理服务器。正向代理服务器,是给客户提供服务的,比如说代理访问一些链路太远的服务器,比如云服务商的镜像加速站等。把链路太远,不容易直接访问到的资源缓存到代理服务器,然后客户端访问这些资源比较快。对于客户端来讲,就是正向代理。

1. 权重

http {

upstream webserver {

server 192.168.1.2 weight=2; # 权重

server 192.168.1.3 weight=1; # 权重

}

server {

listen 80;

server_name __;

location / {

proxy_pass http://webserver;

root html;

index index.html;

}

}

}

默认分配任务的策略是轮询

2. 健康检查

upstream webserver {

server 192.168.99.22:80 ;

server 192.168.99.33:80 max_fails=2 fail_timeout=30;

} # 检测2次失败,认为后端服务器休息;然后每30秒检测一次是否已上线。

upstream webserver {

server 192.168.99.22:80;

server 192.168.99.33:80;

server 192.168.99.44:80;

...

server 192.168.99.99:80;

server 127.0.0.1:80 default max_fails=2 fail_timeout=30;

} # 声明健康检查适用于后端所有服务器

3. 相同客户访问相同服务器

upstream webserver {

ip_hash; # 相同客户访问相同服务器,主要用于用户重复登录的问题

# 根据hash算法,同ip哈希值的用户访问,给同一个后端服务器

server 192.168.99.22:80 ;

server 192.168.99.33:80 ;

}

4. 暂时不参与集群活动

upstream webserver {

server 192.168.99.22:80 down; # 此机器暂时不参与集群活动,先去支持其他业务

server 192.168.99.33:80 ;

}

三、四层代理(tcp/udp代理)

四层代理七层代理区别四层代理http外面stream{ upstream

七层直接upstream,写在http里面upstream用来创建集群

如果四层就是http外面stream里面创建集群

如果七层就是http里面直接upstream

总之两个都要用到upstream

区别四层stream里面七层直接http里面

如果企业运行不是网站业务比如ftpdns这些服务都是服务器运行

这个功能模块默认没有安装--with-stream

然后无论七层还是四层后端都是server里面定义一个proxy_pass 指令

参数这个集群名称

集群里面主机server ip 定义

因为四层代理http没有关系所以http外面

举例ssh集群这个网站没有关系所以需要http之外

四层代理安装--with-stream模块这个模块实现四层代理功能

proxy_pass 指令是调用集群

stream {

upstream backend {

server 192.168.99.22:22;

server 192.168.99.33:22;

}

server {

listen 12345;

proxy_pass backend;

}

}

http {

server {

location / {

}

}

}

测试

ssh 192.168.99.11 -p 12345 # 99.11就会ssh请求转发后端TCP服务器

优化
1. 自定义错误页面开启中文

开启中文:

charset utf-8;

自定义错误页面,取消注释行:

error_page 404 /404.html;

echo "抱歉,您访问的网页不存在" > html/404.html

nginx配置文件里面“/”网站而不是linux

2. 查看后台数据功能

需要nginx另外一个模块

--with-http_stub_status_module

# stub 票据存根这里意思http存根状态

# 核心词status记不住模块可以

./configure --help | grep status

同理可以

./configure --help | grep ssl

找到https网站需要http_ssl模块

如果原来运行nginx没有安装--with-http_stub_status_module

./configure --with-stream --with-http_stub_status_module && make

生成objs/nginx这个nginx主程序

通过objs/nginx -V 验证结果

cp objs/nginx /usr/local/nginx/sbin/nginx

原来主程序覆盖功能模块可以

/usr/local/nginx/目录其他数据

等于说是make重新配置编译主程序然后把新主程序拷贝安装目录程序升级

拷贝前停止nginx服务就行,不用卸载重装

相当于服务补丁而不是重新安装

操作方法

location /status {

stub_status on; # 启动状态页面

allow example_ip; # 允许自己ip

deny all; # 拒绝ip访问这个路径

}

网站访问后台数据,只允许自己看,其他

PV 页面浏览量

UV 独立访客

默认server里面一个location匹配网站根目录/status路径

访问网站这个路径可以看到stub_status网站存根状态

状态解释

Active connections: 活动连接,有多少用户正在访问网站比较真实体现网站访问量

server accepts handled requests

已经接收客户端的连接总数量

已经处理客户端的连接总数据

客户端发送的请求数据

Reading: Writing: Waiting:

服务器正在读取客户端请求数量,用户特别时候这个增加

当前服务器正在回应数据数量

多少用户正在等待服务器响应

这些数据很好展示服务器运行情况如果访问但是等待用户太多那么需要服务器加配置优化性能

3. 优化nginx并发量

worker_processes x; # nginx启动之后开多少干活进程,一般设置等于cpu核心

多少个核心开多少个进程

events {

worker_connections xxxx; # 每个nginx进程支持并发量这个可以设置一些

}

命令 ulimit -n 查看本机器支持最大打开文件数量默认1024

ulimit -n 100000 最大打开文件数调整100000用来ab测试实践中不用调整

ab -n -c http://192.168.xx.xx 压力测试

4. 优化nginx,来支持超长地址。即414错误如何解决,请求url头部太长

client_header_buffer_size 200k;

large_client_header_buffers 4 200k;

http里面添加两行命令参数

网页地址允许开发使用问号传递变量参数

这个变量参数不需要定义这个地址程序自动生成

解决nginx如何支持超长地址问题

nginx缓存数据然后读取这个缓存

nginx保存客户端请求数据默认缓存数据1k

如果请求数据超过1k需要优化

5. 让客户端浏览器,缓存本地数据

不用客户一次服务器发送一次数据大大减轻服务器压力

服务器可以客户端浏览器app缓存服务器刚刚传递过来的数据

location ~* \.(jpg|html|mp4|txt)$ {

expires 30d;

}

# “~”允许正则表达式匹配“*”忽略大小写“\”转义符, “.jpg$”.jpg结尾

# expires 30d; # 30过后这个文件过期数据客户浏览器缓存30

6. 配置网站限流限速

limit_rate 100k; #全局限速

limit_rate 200k; #虚拟主机限速

limit_rate 300k; #file_a目录限速300k

limit_rate 0k; #file_b目录不限速

limit_conn_zone $binary_remote_addr zone=addr:10m; # 一个用户同时打开多个连接也无法突破限制

7. 跨域访问

add_header 'Access-Control-Allow-Origin' 'http://192.168.1.2'; # #服务器响应数据中添加允许跨域访问

8. 隐藏版本号

server_tokens off;

9. 防dos攻击

配置nginx连接共享内存为10M,每秒钟只接收一个请求,最多有5个请求排队,多余的拒绝

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 添加

limit_req zone=one burst=5; # 添加

10. 防止缓冲区溢出

http {

client_body_buffer_size 1k;

client_header_buffer_size 1k;

client_max_body_size 1k;

large_client_header_buffers 2 1k;

python动态页面解析uWSGI

pythonDjango框架

1. 自己一个ini配置文件

]# cat myproject.ini

[uwsgi]

socket=127.0.0.1:8000

chdir=/root/python/python-project

wsgi-file=path/wsgi.py

daemonize=/var/log/uwsgi.log

processes=4

master=true

2. 修改nginx配置文件添加两行

location / {

uwsgi_pass 127.0.0.1:8000; # 默认location里面添加转发后端

include uwsgi_params; # 默认location添加此文件nginx自带

root html;

index index.html index.htm;

}

3. ini文件运行项目

]# uwsgi --ini myproject.ini

补充说明:

1. server在nginx配置文件里面有两层含义,一层是虚拟主机,另一层,包含在upstream xxx块之中的是后端真实服务器。

2. http是七层内容,也就是网站相关的。四层内容http之外比如四层代理。

3. location写在server里面也就是一个虚拟主机里面不同路径不同网站目录默认首页用来匹配客户端访问的网站的路径。

4. proxy_pass调用后端,可以server里面也可以细分serverlocation里面。

5. nginx调优目的为了发挥最大实力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值