是什么?
Nginx是一个高性能的反向代理服务器和高性能web服务器;延伸一下,很多人可能对于正向代理、反向代理不是很清晰,首先来具体了解一下。
正向代理
正向代理,代理的客户端;比如我们要与后台访问数据,然后直接请求代理服务器就可以,然后代理服务器会根据我们的请求去访问具体的服务器,返回给我们想要的数据。从网站的角度上,我们在代理服务器上取数据一次记录,但是网站不知道我们是具体哪个客户端。需要注意。客户端必须设置正向代理服务器,需要知道正向代理服务器的ip地址,还有代理程序的端口;
作用:
1.访问原来无法访问的资源;比如VPN
2.作为缓存,可以增加访问资源的速度;
3.对于客户端访问授权,上网认证等;
4.记录用户访问记录,隐藏用户的信息;
反向代理
反向代理,客户端不知道访问的哪台服务器,只是去访问代理服务器。反向代理对外是透明的,访问者并不知道自己访问的是代理,**因为客户端不需要任何配置就可以访问。**它的方式是代理服务器接受intenet的连接请求,然后将请求转发给内部网络的服务器,并将结果返给我internet连接的请求客户端。
作用:
1.保证内网安全,组织web攻击
2.负载均衡,优化服务器的负载
配置
1.下载tar包;
2.tar -zxvf nginx.tar.gz
3.…/configure [–prefix]
4.make && make install
nginx.conf
主要的模块配置
1.main
2.event:最大连接数
events {
worker_connections 1024;
}
http:与外界连接
http{
}
虚拟主机配置
server {
listen 80; //监听端口
server_name localhost; //此主机
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm; //在这个路径下,访问的页面
}
location 配置
语法
location [= | ~* | ^~ ] /uri/ {...}
配置规则
1.location = /uri 精准匹配
2.location ^~ /uri 前缀匹配
3.location ~ /uri
4.location / 通用匹配
优先级
1.精准匹配是优先级最高
2.普通匹配(最长的匹配)
3.正则匹配
功能
一、负载均衡
按照一定的分配策略,然后将网络负载均衡的分摊到网络集群的各个单元中,使得单个重的负载均衡任务能够分摊到多个单元然后并发处理,减少了访问时间。
格式为
upsteam /{
server address [paramters
}
负载均衡算法
1.轮询算法(默认),如果服务器宕机后,然后自动的踢出
2.ip_hash根据请求的ip地址进行hash
3.权重轮询 weight
二、动静分离
用户在进行访问页面的时候,然后从服务器端获取相应资源通过浏览器解析渲染最后展示给用户,而服务端可以返回这种类型的内容,比如js 、html、png等等,然后浏览器就是通过Nginx下面conf目录下的mime.types文件进行决定用什么形式展示。
location ~ .*\.(js|css|png|svg|ico|jpg)$ {
valid_referers none blocked 192.168.13.160 www.百度.com;
if ($invalid_referer) {
return 404;
} r
oot static-resource;
expires 1d;
}
好处
动静分离可以将静态文件进行缓存,压缩然后提高了网站的性能
(1)缓存:采取好的缓存策略可以很好地减少对网络带宽的占用,提高访问速度,提升用户的体验度,而且可以减轻Nginx服务器的缓存负担。Nginx中用expires设置缓存
(2)压缩::在网站上一些静态东西内存比较大,所以用户访问速度比较慢,所以Nginx中提供了一种gzip压缩优化手段,这样就可以降低文件的大小来提高了传输速度。
代码实现:
Nginx本身就是一个高性能的静态web服务器;
# 打开压缩功能
gzip on;
gzip_vary on;
# 超过多大,进行压缩
gzip_min_length 10k;
# 设置缓存区,下面是按照16k的4倍进行分配内存
gzip_buffers 4 16k;
# 压缩等级,压缩等级越高,压缩越好
gzip_comp_level 6;
# 表示是否需要传输gzip压缩标志;
gzip_vary on;
# 针对的压缩文件
gzip_types text/plain application/javascript
application/x-javascript application/json text/css text/scss
application/xml text/javascript application/x-httpd-php image/jpeg
image/gif image/png image/x-icon;
client_max_body_size 20M;
proxy_connect_timeout 18000;
proxy_send_timeout 18000;
proxy_read_timeout 18000;
三、防盗链
如果在设置网站的过程中,对于自己网站的图片不希望被别人直接通过地址访问,或者想要图片有版权,防盗链就起到很好的作用。
四、跨域访问
当两个节点的协议、域名、端口等不同,那么两个节点之间的访问就是跨域操作。浏览器为了安全问题是限制跨域访问,所以跨域也是浏览器本身限制的。
跨域解决办法
修改proxy_demo.conf配置
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.11.154:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_connect_timeout 60s;
add_header 'Access-Control-Allow-Origin' '*'; // #允许来自所有的访问地址
add_header 'Access-Control-Allow-Methods' 'GET,PUT,POST,DELETE,OPTIONS'; //支持的
请求方式
add_header 'Access-Control-Allow-Header' 'Content-Type,*'; //支持的媒体类型
} l
ocation ~ .*\.(gif|jpg|ico|png|css|svg|js)$ {
root static;
}
}