Nginx服务器进阶

xiaoxiao2025-08-21  51

1.Nginx 动静态资源分离

1.配置反向代理

1.基本的配置

# 修改配置文件需要重启服务器 user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; # 1.创建虚拟主机(主机名称为:www.liujun.com) server { listen 8090; server_name www.liujun.com; location / { # 2.把所有对 www.liujun.com:8090 的请求转发到 https://www.taobao.com proxy_pass https://www.taobao.com; } } }

这种反向代理可以实现 把 HTTP 转换成更安全的 HTTPS 的方案

2.其它配置

代理其他的服务器

# 修改配置文件需要重启服务器 user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; # 1.创建虚拟主机(主机名称为:www.liujun.com) server { listen 8090; server_name www.liujun.com; location / { # 2.把所有对 www.liujun.com:8090 的请求转发到 https://news-at.zhihu.com proxy_pass https://news-at.zhihu.com; # 3.其它配置 proxy_redirect off; # off使 location 或者 refresh 字段维持不变 # 默认情况下反向代理是不会转发请求中的 Host 头部的。如果需要转发,那么必须加上下面的配置 proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }

浏览器访问:http://www.liujun.com:8090/api/4/news/latest 反向代理后变成请求 https://news-at.zhihu.com/api/4/news/latest,最终获取到结果.

地址栏没有变还是http://www.liujun.com:8090/api/4/news/latest

代理同一台服务器的同一个端口

# 修改配置文件需要重启服务器 user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; # 1.创建虚拟主机(主机名称为:www.liujun.com) server { listen 8090; server_name www.liujun.com; location / { # 2.把所有对 www.liujun.com:8090 的请求转发到 www.new.liujun.com:8090 proxy_pass http://www.new.liujun.com:8090; # 3.其它配置 proxy_redirect off; # off使 location 或者 refresh 字段维持不变 # 默认情况下反向代理是不会转发请求中的 Host 头部的。如果需要转发,那么必须加上下面的配置 # 参考文章:https://blog.csdn.net/felix_yujing/article/details/51682655 proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # 2.创建第二个虚拟主机(虚拟主机名称为:www.new.liujun.com) server { listen 8090; server_name www.new.liujun.com; # 本地测试要在hosts中添加对 www.new.liujun.com 的解析 location / { root /usr/local/var/www/webapps/new; # (new项目中只有一个index.html) index index.html index.htm; } } }

浏览器访问:http://www.liujun.com:8090/ 显示的是new项目的网页

地址栏没有变还是http://www.liujun.com:8090/

2.配置动静态资源的分离

1.动态资源 :api接口 、文件 、压缩包 、软件 、 .jsp 、.php 、.shtml 、.ejs 等等

2.静态资源:html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css

# 修改配置文件需要重启服务器 user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; # 创建虚拟主机(主机名称为:www.liujun.com) server { listen 8090; server_name www.liujun.com; # 1.动态资源的加载。 location / { # 把所有对 www.liujun.com:8090 的动态资源的请求转发到 https://news-at.zhihu.com proxy_pass https://news-at.zhihu.com; # 其它配置 proxy_redirect off; proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 2.静态资源的加载。匹配以.html 、.htm 、.gif、.jpg、.jpeg结尾的请求 # ( ~ 表示匹配 URI 时是字母大小写敏感的; ~* 大小写不敏感; \. 是转译.) location ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /usr/local/var/www/webapps/new; # (new项目中只有一个index.html) # expires定义用户浏览器缓存的时间为3天,如静态页不常更新,可以设更长 expires 30d; } } }

上面两个 location 配置快是并列关系

1)浏览器访问:http://www.liujun.com:8090 反向代理到:https://news-at.zhihu.com 这个网站( 地址栏不变 )

2)浏览器访问:http://www.liujun.com:8090/api/4/news/latest 反向代理到 :https://news-at.zhihu.com/api/4/news/latest 这个api 接口

3)浏览器访问:http://www.liujun.com:8090/index.html 直接获取本地的服务器 /usr/local/var/www/webapps/new; 路径下的静态资源。

2.Nginx 负载均衡

由于 Nginx 具有“强悍”的高并发高负载能力,因此一般会作为前端的服务器直接向客户端提供静态文件服务。但也有一些复杂、多变的业务不适合放到 Nginx 服务器上,这时会用Apache、Tomcat 等服务器来处理。于是Nginx 通常会被配置为既是静态 Web 服务器也是反向代理服务器,不适合 Nginx 处理的请求就会直接转发到上游服务器中处理。而upstream 块定义了一个上游服务器的集群,便于反向代理中的 proxy_pass 使用。

# 修改配置文件需要重启服务器 user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; #4.负载均衡配置。负载均衡是指选择一种策略,尽量把请求平均地分布到每一台上游服务器上 # weight: 设置向这台上游服务器转发的权重,默认为 1; # max_fails: 与 fail_timeout 配合使用,在fail_timeout时间内检查max_fails次数,失败则剔除均衡 # fail_timeout: 表示该时间段内转发失败多少次后就认为上游服务器暂时不可用,用于优化反向代理功能 upstream backend_api_service{ # backend_api_service 是负载均衡的名称 server www.liujun.com:8888 weight=1 max_fails=2 fail_timeout=30s; server www.liujun.com:9999 weight=1 max_fails=2 fail_timeout=30s; } # 1.创建虚拟主机(主机名称为:www.liujun.com) server { listen 8090; server_name www.liujun.com; location / { # 4.把所有对 www.liujun.com:8090 动态资源的请求转发到 http://backend_api_service proxy_pass http://backend_api_service; # backend_api_service 是负载均衡的名称 # 5.其它配置 # 如果后端的服务器返回502,504执行超时等错误,自动将请求转发到upstream负载均衡池 # 中的另一台服务器,实现故障转移 proxy_next_upstream http_502 http_504 error timeout invalid_header; } location ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /usr/local/var/www/webapps/blog; # (blog项目中只有一个index.html) expires 30d; } } # 2.创建虚拟主机(主机名称为:www.liujun.com) server { listen 8888; server_name www.liujun.com; location / { root /usr/local/var/www/webapps/new; # 2.修改发布项目的目录 index index.html index.htm; } } # 3.创建虚拟主机(主机名称为:www.liujun.com) server { listen 9999; server_name www.liujun.com; location / { root /usr/local/var/www/webapps/music; # 2.修改发布项目的目录 index index.html index.htm; } } }

1)浏览器访问:http://www.liujun.com:8090/index.html 访问的blog项目

2)浏览器访问:http://www.liujun.com:8090 访问的是new 项目 或者 是music项目

真实环境中负载均衡backend_api_service里面配的都是同一个项目发布在不同的服务器上

3.Nginx 的性能优化

1.全局的配置的优化

user liujun liu; # 1.Nginx worker 进程个数 (启动进程数,通常和cpu的数量相等) worker_processes 8; # 2.绑定 Nginx worker 进程到指定的 CPU 内核。( 为每个进程分配cpu,上例将8个进程分配到8个cpu, # 当然可以写多个,或者将一个进程分配到多个cpu ) worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; #3.*指定 Nginx worker 进程可以打开的最大句柄描述符个数。( 指当一个nginx进程打开的最多文件描述数目, # 理论应该是最多打开文件数 ulimit -n 与 nginx进程数相除,但是nginx分配请求并不是那么均匀, # 所以最好以ulimit -n的值保持一致 ) worker_rlimit_nofile 102400; # 4.全局error 日志的设置(语法:error_log /path/file level;) # 错误等级level[ debug | info | notice | warn | error | crit ] # error_log logs/error.log; # 这种写法nginx启动失败,要编写全路径,并且该文件要存在(如下写法) error_log /usr/local/etc/nginx/logs/error.log error; error_log /usr/local/etc/nginx/logs/error.log info; # 5.pid 文件的路径( 保存 master 进程 ID 的 pid 文件存放路径,例如:/usr/local/nginx/nginx.pid ) pid /usr/local/etc/nginx/logs/nginx.pid; # 要编写全路径,并且该文件要存在 events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; server { listen 8090; server_name localhost; location / { root /usr/local/var/www/webapps/blog; # 2.修改发布项目的目录 index index.html index.htm; } } }

2.event 配置块的优化

user liujun liu; worker_processes 1; events { # 1.选择事件模型(epoll是多路复用io中的一种方式,但是 仅用linux2.0 以上的内核。 # 可以处理大并发连接,大大提高nginx的性能) # use epoll; # 2.每个 worker 的最大连接数( 单个后台worker process进程的最大并发链接数:最大连接=连接数*进程数 ) worker_connections 102400; # 3.批量建立新连接 (尽可能多的接受请求) multi_accept on; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; server { listen 8090; server_name localhost; location / { root /usr/local/var/www/webapps/blog; # 2.修改发布项目的目录 index index.html index.htm; } } }

3.http配置块的优化(一)

user liujun liu; worker_processes 1; events { worker_connections 1024; } http { # 1.设定mime类型,类型由/usr/local/etc/nginx/mime.types文件定义 include mime.types; # 2.当找不到相应的 MIME type 与文件扩展名之间的映射时, # 使用默认的 MIME type 作为HTTP header 中的 Content-Type # ( 默认的数据流:octet-stream是下载数据流) default_type application/octet-stream; # 3.keepalive 超时时间( 默认 keepalive_timeout 75; 秒 ) # 客户端到服务器端的连接持续有效时间。当出现对服务器请求之后,继续请求,它可避免建立或者重新建立连接,提高性能 keepalive_timeout 65; # 4.定义日志格式。可以使用负载均衡功能提供的变量( log_format 要与 access_log 一同使用 ) log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 5.将负载均衡时的一些信息记录到 access_log 日志中(配置http访问日志的保存路径) access_log /usr/local/etc/nginx/logs/access.log main; # 注意:access.log文件要存在 server { listen 9090; server_name localhost; location / { root /usr/local/var/www/webapps/blog; # 2.修改发布项目的目录 index index.html index.htm; } } }

4.http配置块的优化(二)

http://nginx.org/en/docs/http/ngx_http_core_module.html

user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; # 1.指定nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通的应用必须为on # 如果用来进行下载等应用磁盘IO负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime sendfile on; # 2.在打开 sendfile 选项时,确定是否开启 FreeBSD 系统上的 TCP_NOPUSH 或 Linux 系统上 # 的 TCP_CORK 功能。打开 tcp_nopush 后,将会在发送响应时把整个响应包头放到一个 TCP 包中发送 # ( 防止网络阻塞 ) tcp_nopush on; # 3.开始目录列表访问,适合下载服务器(例如:镜像下载网站),默认关闭 autoindex on; # 4.提高数据的实时响应性 tcp_nodelay on; # 5.打开文件缓存( 这个将为打开文件制定缓存,默认是没有启用的,max制定缓存数量,建议和打开文件数一致 # , inactive 是指经过多长时间文件没有被请求后删除缓存。) open_file_cache max=102400 inactive=20s; # 6.检验缓存中元素有效性的频率, 默认60s( 这个是指定多长时间检查一次缓存有效信息 ) open_file_cache_valid 30s; # 7.不被淘汰的最小访问次数( open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果 # 超过这个数字,文件描述符一直是在缓存中打开的) open_file_cache_min_uses 1; server { listen 9090; server_name localhost; location / { root /usr/local/var/www/webapps/blog; # 2.修改发布项目的目录 index index.html index.htm; } } }

5.http配置块的优化(三)

http://nginx.org/en/docs/http/ngx_http_gzip_module.html

user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; # 1.启动gzip压缩( 可以对css , js, image静态资源压缩) gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; # 2.压缩级别大小,最大为9,最小为1,压缩后比例越小越好,cpu处理更快(例如下面:100k-> 80k) # 设值的值越大,消耗cpu比较高(例如设置 9 :100k-> 10k ) gzip_comp_level 2; server { listen 9090; server_name localhost; location / { root /usr/local/var/www/webapps/new; # 2.修改发布项目的目录 index index.html index.htm; } } }

6.http配置块的优化(四)

http://nginx.org/en/docs/http/ngx_http_core_module.html

user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; # 1.HTTP 请求包体的最大值。允许客户端请求的最大单个文件字节数(php后端用的多) client_max_body_size 10m; # 2.存储 HTTP 包体的内存 buffer 大小( 缓存区代理缓冲用户端请求的最大字节数 ) client_body_buffer_size 128k; # 3.存储超大 HTTP 头部的内存 buffer 大小(设定请求缓冲) large_client_header_buffers 4 4k; # 4.存储 HTTP 头部的内存 buffer 大小 # 客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k # 不过由于一般系统分页都要大于1k, 所以这里设置分页大小为4k client_header_buffer_size 4k; server { listen 9090; server_name localhost; location / { root /usr/local/var/www/webapps/new; # 2.修改发布项目的目录 index index.html index.htm; } } }

7.http配置块的优化(五)

http://nginx.org/en/docs/http/ngx_http_proxy_module.html

user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; # 1.nginx跟后端服务器连接超时时间( 代理连接超时 ) proxy_connect_timeout 90; # 2.后端服务器数据回传时间(代理发送超时) proxy_send_timeout 90; # 3.连接成功后,后端服务器响应时间(代理接受超时) proxy_read_timeout 90; # 4.设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffer_size 4k; # 5.proxy_buffers 缓冲区,网页平均在32k一下的话,着用设置 proxy_buffers 4 32k; # 6.高负荷下缓冲大小( 一般等于=proxy_buffer * 2 ) proxy_busy_buffers_size 64k; server { listen 9090; server_name localhost; location / { root /usr/local/var/www/webapps/new; # 2.修改发布项目的目录 index index.html index.htm; } } }

7.server配置块的优化

http://nginx.org/en/docs/http/ngx_http_core_module.html

user liujun liu; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; server { listen 9090; server_name localhost; # 1.使用的字符集 #charset koi8-r; location / { root /usr/local/var/www/webapps/new; # 2.修改发布项目的目录 index index.html index.htm; } # 2.错误码404跳转的页面 error_page 404 /404.html; # 3.定义错误提示页面(错误码404跳转的页面) error_page 500 502 503 504 /50x.html; location = /50x.html { # 5.只有当用户请求是 /50x.html 时,才会使用该 location 下的配置 root html; } # 6.设定查看Nginx状态的地址:http://localhost:9090/NginxStatus location /NginxStatus { stub_status on; } } }
转载请注明原文地址: https://www.6miu.com/read-5035057.html

最新回复(0)