1.nginx的反向代理
互联网中直接将服务器暴露在外面是很危险的,一旦被攻破后果不堪设想。代理服务器的出现,保护了真实的服务器,可以说特别重要了。nginx就是一个代理服务器。客户端发来http请求,先经过nginx的转发给后端服务器处理后,再将结果返回给客户端。此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
2.nginx还可以进行负载均衡
nginx可以向后端转发
3.nginx进行动态分离
静态文件可以有nginx处理,动态文件可以转发后端的php,java之类的服务器来处理
4.nginx的配置文件
配置文件分为全局块、events块、http块三大部分。
5.nginx的优点
1.高并发。静态小文件
2.占用资源少。2万并发、10个线程,内存消耗几百M。
3.功能种类比较多。web,cache,proxy。
4.支持epoll模型,使得nginx可以支持高并发。
5.nginx 配合动态服务,nginx——fastcgi 的方式运行PHP,jsp
6.利用nginx可以对IP限速,可以限制连接数。
7.配置简单,更灵活。
6.nginx的编译安装
./configure --prefix=/data/nginx-1.10.1 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
测试配置文件的正确性:/webservers/nginx -t
启动nginx :/webservers/nginx
进程里查看nginx
ps -ef|grep nginx
查看编译参数:
/webservers/nginx -V
重新平滑启动nginx:/webservers/nginx -s reload
7.nginx配置文件
worker_processes 1; #进程数
events {
worker_connections 1024; #每个进程最大连接数
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server { #虚拟主机配置开始了,特备重要
listen 80; #监听端口
server_name localhost; #主机名称
location / {
root html; #设置根目录
index index.html index.htm; #设置首页文件
}
error_page 500 502 503 504 /50x.html; #错误页面显示
location = /50x.html {
root html;
}
}
}
8.nginx启动状态监控
location /status {
stub_status on; #表示开启stubStatus的工作状态统计功能。
access_log off; #access_log off; 关闭access_log 日志记录功能。
auth_basic “status”; #auth_basic 是nginx的一种认证机制。
auth_basic_user_file conf/htpasswd; #用来指定密码文件的位置。
}
9.nginx负载均衡配置
upstream jcy.com{
ip_hash;#保证一位用户固定访问一台主机
server 192.168.0.108:5000 fail_timeout=2s max_fails=1;#后端服务器的两台主机
server 192.168.0.106:5000 fail_timeout=2s max_fails=1;
}
server {
listen 80;
server_name 192.168.0.101;
location / {
proxy_pass http://jcy.com; #进行后端转发
proxy_redirect default;
proxy_connect_timeout 2s;
}
10.处理php请求的配置
server{
listen 80;
server_name www.jcy.com;
root /webservers/nginx/html; # 准备存放代码工程的路径
location / {
index index.php; #跳转到www.example.com/index.php
autoindex on;
}
#当请求网站下php文件的时候,反向代理到php-fpm
location ~ .php${
include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000; #nginx fastcgi进程监听的IP地址和端口
}
}
11.nginx全局变量
•
a
r
g
s
:
这
个
变
量
等
于
请
求
行
中
的
参
数
,
同
args:这个变量等于请求行中的参数,同
args:这个变量等于请求行中的参数,同query_string。
•
i
s
a
r
g
s
:
如
果
已
经
设
置
is_args: 如果已经设置
isargs:如果已经设置args,则该变量的值为"?",否则为""。
•
c
o
n
t
e
n
t
l
e
n
g
t
h
:
请
求
头
中
的
C
o
n
t
e
n
t
−
l
e
n
g
t
h
字
段
。
•
content_length: 请求头中的Content-length字段。 •
contentlength:请求头中的Content−length字段。•content_type: 请求头中的Content-Type字段。
•
d
o
c
u
m
e
n
t
u
r
i
:
与
document_uri: 与
documenturi:与uri相同。
•
d
o
c
u
m
e
n
t
r
o
o
t
:
当
前
请
求
在
r
o
o
t
指
令
中
指
定
的
值
。
•
document_root: 当前请求在root指令中指定的值。 •
documentroot:当前请求在root指令中指定的值。•host: 请求主机头字段,否则为服务器名称。
•
h
t
t
p
u
s
e
r
a
g
e
n
t
:
客
户
端
a
g
e
n
t
信
息
。
•
http_user_agent: 客户端agent信息。 •
httpuseragent:客户端agent信息。•http_cookie: 客户端cookie信息。
•
l
i
m
i
t
r
a
t
e
:
这
个
变
量
可
以
限
制
连
接
速
率
。
•
limit_rate: 这个变量可以限制连接速率。 •
limitrate:这个变量可以限制连接速率。•request_method: 客户端请求的动作,通常为GET或POST。
•
r
e
m
o
t
e
a
d
d
r
:
客
户
端
的
I
P
地
址
。
•
remote_addr: 客户端的IP地址。 •
remoteaddr:客户端的IP地址。•remote_port: 客户端的端口。
•
r
e
m
o
t
e
u
s
e
r
:
已
经
经
过
A
u
t
h
B
a
s
i
c
M
o
d
u
l
e
验
证
的
用
户
名
。
•
remote_user: 已经经过Auth Basic Module验证的用户名。 •
remoteuser:已经经过AuthBasicModule验证的用户名。•request_body_file`: 客户端请求主体的临时文件名。
•
r
e
q
u
e
s
t
u
r
i
:
请
求
的
U
R
I
,
带
参
数
•
request_uri: 请求的URI,带参数 •
requesturi:请求的URI,带参数•request_filename: 当前请求的文件路径,由root或alias指令与URI请求生成。
•
s
c
h
e
m
e
:
所
用
的
协
议
,
比
如
h
t
t
p
或
者
是
h
t
t
p
s
,
比
如
r
e
w
r
i
t
e
(
.
+
)
scheme: 所用的协议,比如http或者是https,比如rewrite ^(.+)
scheme:所用的协议,比如http或者是https,比如rewrite(.+) $scheme://example.com
1
r
e
d
i
r
e
c
t
;
。
•
1 redirect;。 •
1redirect;。•server_protocol: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
•
s
e
r
v
e
r
a
d
d
r
:
服
务
器
地
址
,
在
完
成
一
次
系
统
调
用
后
可
以
确
定
这
个
值
。
•
server_addr: 服务器地址,在完成一次系统调用后可以确定这个值。 •
serveraddr:服务器地址,在完成一次系统调用后可以确定这个值。•server_name: 服务器名称。
•
s
e
r
v
e
r
p
o
r
t
:
请
求
到
达
服
务
器
的
端
口
号
。
•
server_port: 请求到达服务器的端口号。 •
serverport:请求到达服务器的端口号。•request_uri: 包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz,它无法修改。
•
u
r
i
:
不
带
请
求
参
数
的
当
前
U
R
I
,
uri: 不带请求参数的当前URI,
uri:不带请求参数的当前URI,uri不包含主机名,如/foo/bar.html可能和最初的值有不同,比如经过重定向之类的。它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html。