Nginx相关

转载yongfit

1、nginx的最新版本

nginx的最新版本是1.23.4

2、介绍一下nginx

nginx是一款轻量级、高性能、稳定性高、并发性好的http和反向代理服务器(支持https),同时也是一款负载均衡软件,可以做7层和四层负载均衡。可以做动静分离,nginx解析静态页面的效率非常高,nginx功能非常强大,常用的比如地址重写,防盗链,会话保持,访问控制流量控制等

3、nginx、haproxy、lvs的区别

lvs基于系统内核实现软负载均衡,而haproxy和nginx是基于第三方应用实现的软负载均衡。

haproxy是基于四层和七层的转发,是专业的负载均衡软件

nginx既是web服务器、缓存服务器、又是反向代理服务器,可以做七层和四层的转发

lvs是基于四层的负载均衡,所以做不了基于url和目录的转发

4、什么时候用haproxy什么时候用nginx什么时候用lvs

在并发量大得时候可以用lvs,中小型公司可用nginx或者haproxy,如果只是单纯的负载均衡可以用haproxy,但如果是web服务器的话,建议使用nginx,这也是nginx用的多的原因。还用一种情况可以使用lvs和haproxy,比如RabbitMQ集群,有三台RabbitMQ,我们都知道RabbitMQ镜像模式使用还是比较多的,每个节点都提供服务,但我们总不能给开发提供三个RabbitMQ的节点吧,也不能只提供一个节点的ip,所以就可以使用lvs或者haproxy给三个RabbitMQ提供一个VIP,这样开发老铁可以用这个vip写进前端的配置中。不至于所有数据都往一个RabbitMQ上发送。

5、apache和nginx的区别,为什么不用apache

nginx比apache 占用更少的内存及资源 ,抗并发能力更强,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

apache的rewrite重写功能比nginx强大,模块也更多,两者相比nginx的bug要稍多一点。

一般情况下对性能要求高的话可以使用nginx,如果只要求稳定不要求性能的话可以使用apache

6、动静分离的目的

将网站静态资源与后台应用分开部署,提高用户访问静态网页的速度,降低对后台应用的访问。动静分离的做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则将静态请求全部请求到nginx服务器,动态资源请求全部请求到tomcat,达到动静分离的目的。

7、四层七层负载均衡的区别

四层负载均衡是基于ip+端口进行转发的,复杂度低,传输效率高,因为不需要解析具体的消息内容,但是安全性比较低,七层负载均衡是基于url或者主机ip进行转发的,复杂度高,传输效率相比四层比较低,但是安全性高,功能也比较丰富,比如会话保持、图片压缩等。对比来看两者最大的区别就是效率和功能的区别。四层负载均衡架构设计比较简单,无需解析具体消息内容,在网络吞吐量和处理能力上相对比较高,而七层负载均衡的优势则体现在功能多控制灵活强大

8、nginx的性能调优

系统层面:增大文件句柄打开数。临时修改 ulimit –SHn 永久生效vim /etc/security/limits.conf

服务层面:每个进程的最大文件打开数设置的高一点。worker_rlimit_nofile

cpu的亲和设置,把nginx的进程绑定到不同的cpu,减少进程频繁切换cpu带来的资源损耗。worker_processes 8 最多开启8个,8个以上性能不在提升,稳定性也会变差。1.9版本之后可以设置为auto

选择epoll模型,io多路复用,将worker_connections 10240

设置keepalive_timeout会话保持时间

开启GZIP压缩

设置proxy超时时间

配置日志。方便排错

访问控制,流量控制

开启高效传输 sendfile on tcp_nopush on tcp_nodelay on

内核参数优化

9、nginx的跨域

server {

listen 8080;

server_name localhost;

root html;

location / {

#index index.html index.htm;

#解决vue去掉#号问题,将vue打包的dist文件下文件放到html目录

try_files $uri $uri/ /index.html;

}

#请求http://localhost:8080/api,将该请求转发到百度api,则保证请求在同一个域,解决跨域问题

location /api {

proxy_pass http://api.baidu.com/api;

}

}

server {

listen 8080;

server_name localhost;

root html;

location / {

#vue运行dev在8088端口

proxy_pass http://localhost:8088;

}

#请求http://localhost:8080/api,将该请求转发到百度api,则保证请求在同一个域,解决跨域问题

location /api {

proxy_pass http://api.baidu.com/api;

}

}

10、nginx的会话保持

会话保持的作用:为了确保与某个用户的所有请求能够由一台服务器进行处理

使用第三方模块nginx-sticky-module-ng,使用ip_hash、url_hash

11、nginx怎么做反向代理

Nginx 需要配置文件里面定义,如果后端地址比较多,需要用upstream 模块定义后端服务器地址池,然后再server模块中,定义location模块,用Proxy_pass 转发到此地址池。这样的效果,其实还起到了七层负载均衡的作用。

12、nginx怎么做七层负载均衡

Nginx 需要配置文件里面定义,如果后端地址比较多,需要用upstream 模块定义后端服务器地址池,然后再server模块中,定义location模块,用Proxy_pass 转发到此地址池。这样的效果,其实还起到了反向代理的作用。

13、nginx如何获取客户端的地址

在nginx代理的配置文件中添加,proxy_set_hearder X-Forwarded-For $remode_addr

在nginx的真实web服务器上,也需要相同的配置。

14、nginx如何隐藏版本信息

在配置文件http模块中添加server_tokens off;

15、nginx防盗链怎么做

需要使用一个模块ngx_http_referer_module,并在server块中添加Vaild_referers none,然后配置文件对应配置就可以了

16、nginx的缺点

处理不了动态请求,单进程多线程模式,进程死掉会影响很多用户

17、HTTP常见错误码原因以及解决办法

401 - Unauthorized

原因:您的web服务器开启了密码验证,客户端在请求的时候需要填入用户名和密码,只有输入正确的用户名和密码才能正常访问。

解决方法:
1、输入正确的用户名和密码;
2、关闭web服务器的密码验证功能。

403 - Forbidden

原因:禁止访问,请求是合法的,但是却因为服务器配置规则而拒绝响应客户端请求,此类问题一般为服务器或服务权限配置不当导致。

解决方法:
1、确保主页文件存在,如index.php或index.html;
2、确保web服务器运行用户和站点的目录权限一致,比如你的nginx运行用户为www,你需要确保你的站点目录的所有者为www。

404 - Not Found

原因:服务器找不到客户端请求的指定页面,可能是请求了一个服务器上不存在的资源导致的,也有可能是服务器上的该文件被删除。

解决方法:
1、确保输入的是正确的url;
2、确保你请求的文件在服务器上是真实存在的;
3、如果你的云服务器配置了数据盘,且站点目录在数据盘中,这时候你需要检查数据盘是否被正确挂载或者是否到期被释放掉了。

500 - Internal Server Error

原因:内部服务器错误,服务器遇到了意料不到的错误,不能完成客户的请求。一般为服务器的配置或内部程序的问题。

解决方法:
1、此时可能是服务器资源占用过高,你需要查看一下服务器占用率,必要时清理内存或者重启服务器;
2、文件权限问题,确保你的服务器程序文件权限为755;
3、检查基础服务是否运行,如果您用的是LNMP架构,则需要检查php-fpm和mysql是否正常运行。

502 - Bad Gateway

原因:坏的网关,一般是服务器作为代理服务器请求后端的服务器时,后端的服务不可用或没有完成响应给网关服务器,一般为反向代理服务器后端的服务器节点出现故障。
解决方法:
1、检查代理服务器后端的服务器是否正常运行,以及后端服务器上的服务是否正常运行。

503 - Service Unavailable

原因:服务当前不可用,可能是因为服务器超载或停机维护导致,或者是反向代理服务器后面没有可以提供服务的节点。

解决方法:
1、服务器供应商可能正在维护或者暂停服务,你可以联系一下服务器供应商;
2、还有可能就是服务器的cpu或内存占用过高,需要清理一下资源,必要时重启服务器。

504 - Gateway Timeout

原因:网关超时,一般是网关代理服务器请求后端服务器或者cdn请求源站服务器时,服务器没有在特定的时间内处理并响应请求,一般为服务器过载,没有在指定时间内返回数据。

解决方法:
1、对服务器性能参数进行相关调整,包括php参数调整,数据库参数调整,web服务器参数调整;
2、必要时可以选择升级服务器配置。

 

18、Http和Https的区别

1.安全性不同,Http是超文本传输协议,信息是明文传输,Https则是具有安全性的SSL加密传输协议.

2.响应速度不同,http比https的响应速度更快

3.端口不同http默认访问80端口,https是443端口

4.消耗资源不同,https是构建在SSL之上的http协议,所以https会消耗更多的服务器资源

5.费用不同,https需要购买ssl安全证书,会产生一定的费用

 

19、Nginx负载均衡的算法有哪些

1.轮询 2.权重3.ip_hash 4.url_hash   5.fair智能模块算法

轮询:将每个请求按时间顺序分配到不同的后端服务器

ip_hash:将同一个IP客户端通过hash算法固定到一个后端服务器

url——hash:将访问的url定向到同一个后端服务器

 

20、http get和post区别

1、GET是获取数据,POST是提交数据的。

2、GET参数通过URL传递,POST放在Request body中

3. GET请求只能进行url编码,而POST支持多种编码方式。

4. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

21、关于Gzip压缩?怎么配置,什么时候进行压缩?

gzip on / off   开启或关闭压缩功能;

gzip_comp_level  level   压缩级别设置,可以1~9,默认为1;

gzip_http_version 1.0 / 1.1   设置压缩版本,默认为1.1;

gzip_buffers  4  8k  设置压缩缓冲区大小,如4个8k内存作为压缩结果流缓存;

gzip_types  压缩的文件格式,如scc、html ;

gzip_min_length 1k   压缩的最小文件,小于此值的文件不压缩。

( gzip_vary  on  给响应头加个vary,告知客户端能否缓存;)

一般在传输文件的时候,数据过大,带宽占用过高,可以通过设置压缩的最小文件值,控制大小达到一定值就可以进行文件压缩,减少传输数据的大小;