Nginx常见配置总结

团队介绍

我们是光大科技有限公司智能云计算部运维服务团队系统运维项目组,致力保障和服务集团各业务系统操作系统、中间件和数据库的稳定、安全、高效的运转,降低集团各业务系统以及业务运行的风险,为集体信息化建设保驾护航。我们的团队拥有经验丰富的操作系统、中间件和数据库领域的专家,将不定期分享运维领域的原创技术文章和实践经验,共同探索金融科技领域IT运维的最佳实践和发展趋势。

01

Nginx基础知识

1

简介

Nginx(engine x)是一个高性能的HTTP和反向代理Web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好。

Nginx的优点

2

Nginx作为HTTP服务器,有以下几项基本特性:

  1. 静态文件处理,索引文件和自动索引,打开文件的描述符缓冲;

  2. 反向代理加速无缓存、负载均衡和容错;

  3. FastCGI;

  4. 模块化的结构:包括chunked、byte、responses、gzipping、ranges以及SSI-filter等filter;

  5. 支持SSL和TLS;

  6. Nginx专为性能优化开发,性能是重要的考量;

  7. Nginx有很高的稳定性。Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。Nginx官方表示保持10000个没有活动的连接,只占2M内存。

02

Nginx安装及调试

1

pcre安装

./configuremake && make installcd ../

Nginx编译安装

2

/configure --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-http_stub_status_module  \\\\--with-openssl=/usr/local/openssl  \\\\make && make install

更多模块的安装方法请参照官方wiki。

3

Nginx配置文件测试

# /usr/local/nginx/sbin/nginx –t   //测试配置文件有没有错误

结果返回如下:

2020/8/16 19:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.confsyntax is ok

Nginx启动

4

# /usr/local/nginx/sbin/nginx

5

Nginx配置文件修改重新加载

# kill -HUP `cat /usr/local/nginx/logs/nginx.pid

03

Nginx Rewrite

1

Nginx基本标记(flags)

last –    基本上都用这个Flag。相当于Apache里的[L]标记,表示完成rewrite,不再匹配后面的规则

break –    中止Rewrite,不再继续匹配

redirect –    返回临时重定向的HTTP状态302

permanent –    返回永久重定向的HTTP状态301,原有的URL支持正则重写的URL不支持正则

正则表达式匹配

2

* ~    为区分大小写匹配

* ~*    为不区分大小写匹配

* !~和!~*    分别为区分大小写不匹配及不区分大小写不匹配

3

文件及目录匹配

* -f和!-f用来判断是否存在文件

* -d和!-d用来判断是否存在目录

* -e和!-e用来判断是否存在文件或目录

* -x和!-用来判断文件是否可执行

04

Nginx Redirect

将所有xxxx.com与gdkj.xxxx.com域名全部自跳转到http://zzzz.com。

server{    listen 80;    server_name xxxx.com xxxxx.com;    index index.html index.php;    root /gdkj/www/;    if ($host !~ \\\"^www\\\\.xxxx\\\\.com$\\\") {        rewrite ^(.*) http://www.zzzz.com$1 redirect;    }    ........................}  

05

Nginx目录自动加斜线

if (-d $request_filename) {    rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;}

06

Nginx Location

基本语法:和上面rewrite正则匹配语法基本一致。

location [=|~|~*|^~] /URL/  {
}* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~* 分别为区分大小写不匹配及不区分大小写不匹配

示例1

location = /  {    # 只匹配 / 查询}# 匹配任何查询,因为所有请求都以/开头。但是正则表达式规则和长的块规则将被优先和查询匹配

示例2

location ^~ /images/ {# 匹配任何以 /images/ 开头的任何查询并且停止搜索,任何正则表达式将不会被测试

示例3

location ~* \\\\.(gif|jpg|jpeg)$  {}# 匹配任何以 gif、jpg 或 jpeg 结尾的请求

07

Nginx expires

1

根据文件类型expires

location ~* \\\\.(js|css|jpg|jpeg|gif|png|swf)$ {    if (-f $request_filename) {        root /gdkj/www/;        expires 1d;        break;    }}

根据判断某个目录

2

location ~ ^/(images|javascript|js|css|flash|media|static)/ {    root  /gdkj/www/;    expires 30d;}

08

Nginx负载均衡

1

Nginx负载均衡基础知识

Nginx的upstream目前支持5种方式的分配:

  1. 轮询(默认)

    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

  2. weight

    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

  3. ip_hash

    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

  4. fair(第三方)

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  5. url_hash(第三方)

Nginx负载均衡实例

2

upstream gdkj.com {      #定义负载均衡设备的Ip及设备状态    server 127.0.0.1:9090 down;    server 127.0.0.1:8080 weight=2;    server 127.0.0.1:6060;    server 127.0.0.1:7070 backup;}

在需要使用负载均衡的server中增加:

proxy_pass http://gdkj.com;

每个设备的状态设置为:

a) down表示单前的server暂时不参与负载;

b) weight默认为1,weight越大,负载的权重就越大;

c) max_fails:允许请求失败的次数默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误;

d) fail_timeout:max_fails次失败后,暂停的时间;

e) backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

Nginx支持设置多个负载均衡,可以使不同的server使用。

client_body_in_file_only    设置为on可以将client post过来的数据记录到文件中用来做 debug

client_body_temp_path    设置记录文件目录可设置最多3层目录

location    对URL进行匹配,可以进行重定向或者进行新的代理负载均衡

09

常见问题与错误处理

1

400 bad request错误的原因和解决办法

配置nginx.conf相关设置如下:

client_header_buffer_size 16k;large_client_header_buffers 4 64k;

根据具体情况调整,一般适当调整值就可以。

Nginx 502 Bad Gateway错误

2

proxy_next_upstream error timeout invalid_header http_500 http_503;

或者尝试设置:

large_client_header_buffers 4 32k;

3

Nginx出现的413 Request Entity Too Large错误

这个错误一般在上传文件的时候会出现,编辑Nginx主配置文件Nginx.conf,找到http{}段,添加:

client_max_body_size 10m; //设置多大根据自己的需求作调整

解决504 Gateway Time-out(nginx)

4

这种情况可能是nginx默认配置fastcgi进程响应缓冲区太小造成的,这将导致fastcgi进程挂起,如果fastcgi服务对这个挂起处理的不及时,那么就极有可能导致504Gateway Time-out,如果一个HTML页达到了几百K。默认的fastcgi进程响应的缓冲区是8K,可以设置大点,在nginx.conf里加入:

fastcgi_buffers 8 128k; //设置 fastcgi 缓冲区为 8×128k

5

如何使用Nginx Proxy

一台服务器运行tomcat为18080端口,IP:192.168.10.10:18080,另一台机器IP:192.168.10.18。通过访问http://192.168.10.18即可访问tomcat服务,配置为:

在192.168.10.18的nginx.conf上配置如下:

# kill -HUP `cat /usr/local/nginx/logs/nginx.pid

如何关闭Nginx的日志

6

access_log /dev/null;error_log /dev/null;

以上就是本期的Nginx常见配置总结,文中有不足之处,请提出宝贵的意见。

参考文献

Nginx官方wiki https://www.nginx.com/resources/wiki/

往期推荐 ●●

// 1

一个Java对象究竟占用多大内存?–Java性能优化基础

// 2

数据中心与云

// 3

如何让你的H5页面首屏秒开?首屏优化方案深度探讨

// 4

新一代报警处理引擎技术

欢迎关注EBCloud

作者:江湖人称晓明哥

原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/32759.html

Like (0)
EBCloud的头像EBCloud
Previous 2024年4月2日 下午3:28
Next 2024年4月2日 下午3:28

相关推荐

  • 站群优化怎么做

    站群优化怎么做?站群优化,作为网站推广的重要手段,是如何实现的呢?它的重要性又体现在哪里?如何通过简单的步骤和方法来进行站群优化?选择适合的云服务器又有哪些注意事项?随着互联网时代…

    行业资讯 2024年4月15日
    0
  • 网站被百度屏蔽,百度域名被屏蔽怎么办啊

    您是否遇到过您的百度域名被屏蔽的情况?这是一个很麻烦的问题,不仅影响网站流量和排名,而且给互联网行业造成很大损失。那么百度域名被屏蔽的原因有哪些呢?如果遇到这种情况,该如何解决呢?…

    行业资讯 2024年5月7日
    0
  • 网址被屏蔽打不开怎么办手机,网址被禁止访问是怎么回事

    我们都有过无法打开网站的经历,但有时您会意识到网站被阻止了。此类问题给我们的上网体验带来极大的不便,甚至影响我们正常的工作和生活。那么为什么URL 会被屏蔽呢?这对我们有何影响?我…

    行业资讯 2024年5月11日
    0
  • 江西seo

    江西seo,这个看似晦涩的行业名词,却蕴含着无穷的商机和发展空间。作为云服务器行业的重要一环,SEO是如何影响着江西地区的云服务器市场?它又是如何帮助企业提升知名度和竞争力?让我们…

    行业资讯 2024年4月9日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注