- 正向代理和反向代理
- nginx安装
- nginx依赖安装
- 安装nginx
- nginx配置文件
- 配置文件组成:
- 虚拟主机配置
- 基于域名虚拟主机配置
- 基于端口号的虚拟主机配置
- 基于ip的虚拟主机配置
- server_name匹配规则及顺序
- 日志配置
- location配置规则及优先级
1、正向代理:【客户端与代理服务器属于同一局域网】
一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并制定目标(目标服务器),然后代理服务器向原始服务器转发请求并将获得的内容返回客户端【隐藏客户端地址,此刻代理服务器代表客户端】
客户端只需要浏览器设置代理服务器ip和端口号即可,客户端指导代理服务器和web服务器的存在
2、反向代理:【服务器端与代理服务器属于同一局域网】
以代理服务器来接受interne上的连接请求,然后请求转发给内部网路上的服务器,比并将请求从服务器上得到的结果返回给inntert上的请求的客户端,代理服务器对外表现为一个反向代理服务 【客户端只会指导代理服务器地址,不会知道服务器后面的服务器集群地址】
3、正向代理和反向代理区别
- 位置不同
正向代理,架设再客户端和目标主机之间
反向代理,假设在服务器端 - 代理对象不同
正向代理,代理客户端,服务端不知道实际发起请求的客户端;
反向代理,代理服务端,客户端不知道实际提供服务的服务器; - 适用场景
正向代理:
访问被禁止的资源(vpn)
隐藏客户端地址
进行客户访问控制【访问认证,记录用户访问记录,内部资源 控制】
过滤内容
反向代理:
负载均衡、机密/ssl加速,数据加压,访问控制
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
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)
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的请求都会匹配到
匹配顺序:精确匹配-》普通匹配-》正则匹配
注:正则匹配会根据匹配顺序找到第一个匹配的正则表达式后停止搜索。普通字符匹配则无视顺序,只会选择最精确的匹配



