栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

nginx

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

nginx

nginx
  • 正向代理和反向代理
  • nginx安装
    • nginx依赖安装
    • 安装nginx
  • nginx配置文件
    • 配置文件组成:
    • 虚拟主机配置
      • 基于域名虚拟主机配置
      • 基于端口号的虚拟主机配置
      • 基于ip的虚拟主机配置
    • server_name匹配规则及顺序
    • 日志配置
    • location配置规则及优先级

正向代理和反向代理

1、正向代理:【客户端与代理服务器属于同一局域网】
一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并制定目标(目标服务器),然后代理服务器向原始服务器转发请求并将获得的内容返回客户端【隐藏客户端地址,此刻代理服务器代表客户端】

客户端只需要浏览器设置代理服务器ip和端口号即可,客户端指导代理服务器和web服务器的存在
2、反向代理:【服务器端与代理服务器属于同一局域网】
以代理服务器来接受interne上的连接请求,然后请求转发给内部网路上的服务器,比并将请求从服务器上得到的结果返回给inntert上的请求的客户端,代理服务器对外表现为一个反向代理服务 【客户端只会指导代理服务器地址,不会知道服务器后面的服务器集群地址】


3、正向代理和反向代理区别

  • 位置不同
    正向代理,架设再客户端和目标主机之间
    反向代理,假设在服务器端
  • 代理对象不同
    正向代理,代理客户端,服务端不知道实际发起请求的客户端;
    反向代理,代理服务端,客户端不知道实际提供服务的服务器;
  • 适用场景
    正向代理:
    访问被禁止的资源(vpn)
    隐藏客户端地址
    进行客户访问控制【访问认证,记录用户访问记录,内部资源 控制】
    过滤内容
    反向代理:
    负载均衡、机密/ssl加速,数据加压,访问控制
nginx安装 nginx依赖安装

1、安装前准备gcc环境
yum install gcc-c++
2、安装pcre【pcre兼容正则表达式库】
yum install -y pcre pcre-devel
3、 安装zlib[【nginx支持压缩功能】
yuml install -y zlib zlib-devel
4、Openssl【密码算法,密钥证书封装功能,ssl协议】
yuml install -有openssl opensl-devel
5、安装echo-nginx-module
配置
./configure --prefix=/usr/local/nginx -add-module=/解压的echo-nginx-module目录
make -j4 && make install

安装nginx

1、解压 nginx-版本.zip
tar -xvf nginx-**.zip
2、进行configure配置
./configure -prefix=/usr/local/nginx
3、编译安装
make & make install -j 4
4、启动nginx
./nginx -c 指定配置文件位置【默认是nginx.conf】
5、停止nginx
./nginx -s stop 停止 --》【此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程】
./nginx -s quit 退出 – 【此方式停止步骤是待nginx进程处理任务完毕进行停止】

./nginx -s reload 重新加载nginx.conf【不用停止再启动了】
发送信号量
kill -TERM master进程号 (类似 stop,kill -9)
kill -QUIT master进程号 (类似quit)

nginx配置文件 配置文件组成:

main:全局配置–》影响其他所有设置
server:主机设置-》主机+端口
upstrem:负载均衡服务器设置–》负载均衡,服务器集群地址;
location:url匹配特定位置的设置-》匹配网页地址
四者关系:server继承main,location继承server,upstream既不继 承其他,也不被其他继承

#user nobody;//主模块命令,指定nginx的worker进程运行用户及用户组,默认是nobody账号运行
worker_processes  1;//nginx要开启的进程数

//定义全局错误日志文件路径和日志级别,级别有debug,notice,warn,info,error,crit;debug比较想起,而crit输出日志较少
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;#指定进程id的存储文件位置

------------------------------------------------------------------------------
//设定nginx的工作模式及连接数上限,其中参数use用来指定nginx的工作模式【epoll/poll/select/kqueue等】,其中select和poll是标准工作模式,kqueue和epoll是高效工作模式
# events块
events {
     use epoll;
    worker_connections  1024;//设置nginx每个进程最大的链接数,默认1024,max_client=worker_processes*woreker_connection,进程最大连接数收到系统最大打开文件数限制, 
}
# http块 
http {
------------------------------------------------------------------------------# http全局块
    include       mime.types;//主模块命令,对配置文件所包含文件的设定,减少主配置文件的复杂度,相当于把部分设置放在其他地方,然后在包含进来,保持主配置文件的简洁
    
    default_type  application/octet-stream;//默认文件类型
  proxy_intercept_errors on;
  //配置nginx负载均衡的服务器里欸包
  upstream xhrybak{
          #weight参数表示权值,权值越高被分配到的几率就越大
          server 172.23.28.235:8089 weight=5;
          server 172.23.26.15:8109 weight=1;
  }
  ssl密钥认证配置
#   server {
#     listen 1443 ssl;
#     ssl_certificate /opt/keystore/HuaYu.cer;
#     ssl_certificate_key /opt/keystore/HuaYu.key;
#     ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
#     location /pzxt {
#       proxy_pass https://172.23.26.44:10076;
#       proxy_set_header Host $host:$server_port;
#       proxy_set_header X-Real-IP $remote_addr;
#       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#       proxy_set_header X-Forwarded-Proto $scheme;
#     }
#   }


     /指定nginx日志文件格式
    #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;

    sendfile        on;//开启高效文件传输模式【零拷贝方式】,避免内核缓冲区数据和用户缓冲区数据之间的拷贝
    #tcp_nopush     on; 

    #keepalive_timeout  0;
    keepalive_timeout  65;//客户连接超时时间

    #gzip  on;       设置是否开启gzip模块
------------------------------------------------------------------------------    
# server块
//虚拟主机的配置,可以写在其他文件中,然后用include包含进来
比如:/usr/local/nginx/test/tet1.conf或者/usr/local/nginx/test/*
server {
# server全局块
        listen       80;//虚拟主机的服务端口
        server_name  localhost;//用来指定ip或者域名,多个域名用逗号分开

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

# location块
//地址匹配设置,支持正则匹配,条件匹配,这里为默认请求访问地址,用户可以用location命令对nginx进行动态和静态网页过滤处理
        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;
        }

        # 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;
        #}
  }
  //反向代理的配置
    location /xhry {
      proxy_pass http://xhrybak;
      proxy_set_header Host $host:$server_port;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    配置nginx状态的地址
    login nginxStatus{
	stub_status on;//nginx状态
	access_log on;//开启日志
	auth_basic "nginxstatus"
	auth_basic_user_file conf/htpsswd;
	}

}
	
# 可以配置多个server块	

}
 
虚拟主机配置 基于域名虚拟主机配置

1、修改主机的host文件
格式为 :ip地址 域名
172.23.21.23 mail.thun.com
2、nginx.conf配置

server{
	listen 9090
	server_name main.thun.com;
	location /{
	 root /html/main
	 inndex index.html;
	}
}

server{
	listen 9090
	server_name xyy.thun.com;
	location /{
	 root /html/main
	 inndex index.html;
	}
}
基于端口号的虚拟主机配置
server{
	listen: 8080(端口号不同)
	server_name:aa.com  //  ip/域名 (多个server配置一致)
}

server{
	listen: 9090(端口号不同)
	server_name: aa.com;//ip/域名 (多个server配置一致) 
}
基于ip的虚拟主机配置

查询本机ip地址信息

  • 添加网卡ip别名
    其他机子如果能够平通以下新增的ip地址,则表明配置成功
 ifconfig ens192:1  172.23.26.55 broadcast 0172.23.26.253   netmask 255.255.255.0 up
 route add -host 172.23.26.55 dev ens 192:1
 
 ifconfig ens192:2  172.23.26.66  broadcast 0172.23.26.253   netmask 255.255.255.0 up route
add -host 172.23.26.66 dev ens 192:2


真实地址和虚拟地址区别是,虚拟地址没有rx,Tx信息

server{
	listen 80
	server_name  172.23.26.66 ;
	location /{
	 root /html/main
	 inndex index.html;
	}
}
server{
	listen 80
	server_name  172.23.26.55 ;
	location /{
	 root /html/main
	 inndex index.html;
	}
}

注意:以上命令存放到/etc/rc.local文件中,开机会自动运行,可防止重启后失效

server_name匹配规则及顺序

1、最高优先级:完全优先级

server{
	lisiten 80;
	server_name aa.cn;
}

2、第二优先级,通配符在前

server{
	lisiten 80;
	server_name *.cn;
}

3、第三优先级,通配符在后

server{
	lisiten 80;
	server_name dd.*;
}

4、正则匹配

server{
	lisiten 80 ;
	server_name ~^w+.con$;
}
4、listen配置项中,default影响
```xml
server{
	lisiten 80 default;
	server_name dd.*;
}

defalult关键字在所有server段下面的server_name都匹配不上时候才有效果
优先级与配置顺序无关

日志配置
#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 记录请求状态
body_bytes_sent 发送客户端的字节数,不包含响应头大小
http_referer  记录从哪个页面连接访问过来的
http_user_agent 记录客户端浏览器相关信息
bytes_sent 发送给客户端的总字节数
connection 连接的序列号
connection_requests 当前通过一个连接活的的请求数量
msec日志写入时间,单位秒,精度毫秒
location配置规则及优先级

1)范围:匹配指定的请求url,不包含后面参数,比如http://172.23.23.105/test?id=1001,请求实test
2) 格式
location 【=||*|^~|@】 /uri/

  • = /uri 表示精确前缀匹配,只有完全匹配才能生效
  • ^~ /uri 表示普通匹配字符串匹配上以后不再进行正则匹配
  • ~ parttern 表示区分大小写的正则表达式匹配
  • ~* pattern 表示不区分大小写的正则表达式匹配
  • /uri 不带任何修饰符,表示前缀匹配【一般匹配,最长命中匹配】
  • / 通用匹配,任何未匹配到其他location的请求都会匹配到
    匹配顺序:精确匹配-》普通匹配-》正则匹配
    注:正则匹配会根据匹配顺序找到第一个匹配的正则表达式后停止搜索。普通字符匹配则无视顺序,只会选择最精确的匹配
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/941659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号