| 
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默认不支持动态网站 
 
 l: linux 
 n: nginx 
 
 
 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里面 
 如果企业运行的不是网站业务,好比ftp、dns,这些服务都是能在服务器上运行。 
 这个功能 模块默认没有安装,--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
 
 
 python用Django框架 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里面,也可以细分到server的location里面。 
 5. nginx调优的目的是为了发挥它的最大实力。 
 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
 |