找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 68|回复: 3

[建站] Nginx配置终极版指南

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:245
  • 打卡月天数:2
  • 打卡总奖励:7719
  • 最近打卡:2025-12-05 20:56:49

350

主题

557

回帖

1万

积分

管理员

积分
10407
发表于 2024-11-10 01:30:43 | 显示全部楼层 |阅读模式
因为 Nginx 的版本更新较快,而且配置方法基本没有太大变化。以下是一个基本的 Nginx 配置示例,这个配置适用于大多数常见的 Nginx 配置场景:
  1. # 定义 Nginx 运行的用户和用户组
  2. user  nginx;
  3. #nginx进程数,建议设置为等于CPU总核心数。
  4. worker_processes  auto;
  5. # 指定工作模式和连接数上限
  6. events {
  7.     worker_connections  1024;
  8. }

  9. # 指定 HTTP 服务器配置
  10. http {
  11.     # 设置日志格式
  12.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  13.                       '$status $body_bytes_sent "$http_referer" '
  14.                       '"$http_user_agent" "$http_x_forwarded_for"';

  15.     # 引入 mime.types 文件,用于设定不同扩展名的文件所对应的 MIME 类型
  16.     include    /etc/nginx/mime.types;

  17.     # 默认的文件扩展名
  18.     default_type application/octet-stream;

  19.     # 设置访问日志和错误日志路径
  20.     access_log  /var/log/nginx/access.log  main;
  21.     error_log  /var/log/nginx/error.log warn;

  22.     # 设置静态资源的缓存时间
  23.     sendfile    on;
  24.     keepalive_timeout 65;

  25.     # 包含其他的配置文件
  26.     include /etc/nginx/conf.d/*.conf;
  27.     include /etc/nginx/sites-enabled/*;
  28. }

  29. # 设置服务器的错误页面
  30. server {
  31.     listen       7777;
  32.     server_name 127.0.0.1;

  33.     # 定义当请求的文件或者路径不存在时,会跳转到 /404.html
  34.     location / {
  35.         root   /usr/share/nginx/html;
  36.         index  index.html index.htm;
  37.         try_files $uri $uri/ /404.html;
  38.     }

  39.     # 定义错误页面
  40.     error_page  404              /404.html;
  41.         location = /40x.html {
  42.     }

  43.     error_page   500 502 503 504  /50x.html;
  44.         location = /50x.html {
  45.     }
  46. }
复制代码

这个配置文件包含了基本的 Nginx 配置选项,包括日志格式、MIME 类型设置、访问日志和错误日志的配置,以及 sendfile 和 keepalive 设置。同时,它展示了如何定义一个基本的服务器,并设置了错误页面。这个配置文件应该被放置在 /etc/nginx/nginx.conf 或者 Nginx 的配置目录中。
论坛免责声明
版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。
  • 打卡等级:热心大叔
  • 打卡总天数:245
  • 打卡月天数:2
  • 打卡总奖励:7719
  • 最近打卡:2025-12-05 20:56:49

350

主题

557

回帖

1万

积分

管理员

积分
10407
 楼主| 发表于 2024-11-10 01:39:03 | 显示全部楼层
前言
对于自己上线项目的前端来说,nginx也是必须要了解和熟悉的,查了很多的nginx文章,看着写的都很详细,但是却没有了整体的概念。这里就重新梳理一遍,也理清思路。
我们在安装nginx之后,会自动生成很多的文件,但是nginx.conf这个文件是我们的核心,如何去正确的修改和优化它是nginx的核心。
首先我们可以先看下原本的配置,你会觉得无所适从,因为感觉这个鬼东西也太多了吧。而且感觉根本就不理解,也不知道该怎么写。下面,就一步一步的教你如何入门到熟悉
一.nginx.conf原本配置到解释
这个文件总共118行(其中注释占一大半之多)
  1. #user  nobody;
  2. worker_processes  1;

  3. #error_log  logs/error.log;
  4. #error_log  logs/error.log  notice;
  5. #error_log  logs/error.log  info;

  6. #pid        logs/nginx.pid;


  7. events {
  8.     worker_connections  1024;
  9. }


  10. http {
  11.     include       mime.types;
  12.     default_type  application/octet-stream;

  13.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  14.     #                  '$status $body_bytes_sent "$http_referer" '
  15.     #                  '"$http_user_agent" "$http_x_forwarded_for"';

  16.     #access_log  logs/access.log  main;

  17.     sendfile        on;
  18.     #tcp_nopush     on;

  19.     #keepalive_timeout  0;
  20.     keepalive_timeout  65;

  21.     #gzip  on;

  22.     server {
  23.         listen       80;
  24.         server_name  localhost;

  25.         #charset koi8-r;

  26.         #access_log  logs/host.access.log  main;

  27.         location / {
  28.             root   html;
  29.             index  index.html index.htm;
  30.         }

  31.         #error_page  404              /404.html;

  32.         # redirect server error pages to the static page /50x.html
  33.         #
  34.         error_page   500 502 503 504  /50x.html;
  35.         location = /50x.html {
  36.             root   html;
  37.         }

  38.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  39.         #
  40.         #location ~ \.php$ {
  41.         #    proxy_pass   http://127.0.0.1;
  42.         #}

  43.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  44.         #
  45.         #location ~ \.php$ {
  46.         #    root           html;
  47.         #    fastcgi_pass   127.0.0.1:9000;
  48.         #    fastcgi_index  index.php;
  49.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  50.         #    include        fastcgi_params;
  51.         #}

  52.         # deny access to .htaccess files, if Apache's document root
  53.         # concurs with nginx's one
  54.         #
  55.         #location ~ /\.ht {
  56.         #    deny  all;
  57.         #}
  58.     }


  59.     # another virtual host using mix of IP-, name-, and port-based configuration
  60.     #
  61.     #server {
  62.     #    listen       8000;
  63.     #    listen       somename:8080;
  64.     #    server_name  somename  alias  another.alias;

  65.     #    location / {
  66.     #        root   html;
  67.     #        index  index.html index.htm;
  68.     #    }
  69.     #}


  70.     # HTTPS server
  71.     #
  72.     #server {
  73.     #    listen       443 ssl;
  74.     #    server_name  localhost;

  75.     #    ssl_certificate      cert.pem;
  76.     #    ssl_certificate_key  cert.key;

  77.     #    ssl_session_cache    shared:SSL:1m;
  78.     #    ssl_session_timeout  5m;

  79.     #    ssl_ciphers  HIGH:!aNULL:!MD5;
  80.     #    ssl_prefer_server_ciphers  on;

  81.     #    location / {
  82.     #        root   html;
  83.     #        index  index.html index.htm;
  84.     #    }
  85.     #}

  86. }
复制代码


没关系,我们把其中的注释都删掉,除掉了注释之后的nginx代码,现在只有22行了。感觉好多了
  1. worker_processes  1;
  2. events {
  3.     worker_connections  1024;
  4. }
  5. http {
  6.     include       mime.types;
  7.     default_type  application/octet-stream;
  8.     sendfile        on;
  9.     keepalive_timeout  65;
  10.     server {
  11.         listen       80;
  12.         server_name  localhost;
  13.         location / {
  14.             root   html;
  15.             index  index.html index.htm;
  16.         }
  17.         error_page   500 502 503 504  /50x.html;
  18.         location = /50x.html {
  19.             root   html;
  20.         }
  21.     }
  22. }
复制代码
注解版本:
  1. #nginx进程数,建议设置为等于CPU总核心数。
  2. worker_processes  1;
  3. # 事件区块开始
  4. events {
  5.     #单个进程最大连接数(最大连接数=连接数*进程数)
  6.     #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为。
  7.     worker_connections  1024;
  8. }
  9. #设定http服务器,利用它的反向代理功能提供负载均衡支持
  10. http {
  11.     #include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中
  12.     include       mime.types;
  13.      #默认文件类型
  14.     default_type  application/octet-stream;
  15.     #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
  16.     #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
  17.     sendfile        on;
  18.       #长连接超时时间,单位是秒
  19.     keepalive_timeout  65;
  20.     # 第一个Server区块开始,表示一个独立的虚拟主机站点
  21.     server {
  22.         # 提供服务的端口,默认80
  23.         listen       80;
  24.         # 提供服务的域名主机名
  25.         server_name  localhost;
  26.         #对 "/" 启用反向代理,第一个location区块开始
  27.         location / {
  28.             root   html;  #服务默认启动目录
  29.             index  index.html index.htm; # 默认的首页文件,多个用空格分开
  30.         }
  31.          # 错误页面路由
  32.         error_page   500 502 503 504  /50x.html; # 出现对应的http状态码时,使用50x.html回应客户
  33.         location = /50x.html { # location区块开始,访问50x.html
  34.             root   html;  # 指定对应的站点目录为html
  35.         }
  36.     }
  37. }
复制代码

二.整体基本理解
虽然上面有了注解,但是看起来还是很迷糊。接着解释:我们可以把nginx.conf分为三个部分进行理解:
  • 第一部分:全局块
  • 第二部分:events块
  • 第三部分:http块
对应图解:
                                       tmul2zf734gvs_39f26e75d9e942248142801d2351db86.jpg                                                       
全局块:
作用:从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的
  1. worker_processes  1;
复制代码
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。
events块:
作用:events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
  1. worker_connections  1024;
复制代码
上述例子就表示每个 work process 支持的最大连接数为 1024。
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

http块:
作用:这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http全局块、server 块。
  • http全局块
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
  • server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
  • 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
  • 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
  • 全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
  • location 块
一个 server 块可以配置多个 location 块。

这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
    tmul2zf734gvs_e43848fb92c048259ec0d269e875aebc.jpg       

三.最简单的上线
以上,我们就知道了nginx整体大致的结构,以及每部分的结构是用于做什么的。接下来我们就修改nginx关键位置来实现我们网站的代理功能。看着nginx配置很繁琐,但是如果你只是需要上线一个网站,那么你只需要去修改两个地方即可:
   tmul2zf734gvs_a1bdfc91bb8f4649aee1c17e31661243.jpg                                                       
我们可以使用默认简单的配置,然后指定server_name和root,主要是告诉nginx代理的ip是xxx,然后我放在服务器的文件在bbb文件夹即可。nginx便会在用户访问这个ip时,自动的将bbb文件夹中的index.html返回到浏览器来展示页面。
四.nginx优化:
1.前端history模式404问题:
location / {
    try_files $uri $uri/ /index.html;
}
这段代码的作用是,当用户刷新页面时,Nginx会先检查当前URL是否存在,如果不存在,就会尝试访问index.html,从而可以正常显示页面。
tmul2zf734gvs_1191c63b84e7418a9a2b9b451ba5d429.jpg                                                       
2.反向代理:
相信大家作为前端都了解跨域问题,目前前端的主流解决跨域的方式就是
  • 开发生产cors解决
  • 开发proxy,生产nginx解决。
如何配置:
#接口端
location /police/ {
    proxy_redirect default;
    proxy_http_version 1.1;
    proxy_connect_timeout   60;
    proxy_send_timeout      60;
    proxy_read_timeout      90;
}
具体位置:
tmul2zf734gvs_2ff037d2d3df46e0bd30e3b7a677c593.jpg                                                       
理解:
这段代码的意思:大致就是如果遇到以/police请求开头的接口,那么就去访问这个ip地址(http://192.168.1.182:8852/police/)的后台端口。
例如我们通过axios去访问/police/getList这个后台接口时,nginx会将这个请求转发到ip端口为http://192.168.1.182:8852的后台中,后台将结果返回给nginx,nginx再把结果给到浏览器,实现反向代理。
定义多个端口的反向代理:
copy上面的,直接修改代理头和proxy_pass即可。
    tmul2zf734gvs_ad43809dc0e74ca993e553f7b237c487.jpg                                                       
3.开启gzip:
作用:
开启gzip对于前端来说还是比较重要的,浏览器加载的包大概能节约一半的空间。例如首页需要加载a.js文件,该文件为900kb,在开启gzip之后,浏览器会去加载a.js经过gzip之后的文件a.js.gz,大概只有450kb,能够很好的提升浏览速度。
如何配置:
gzip on; # 默认off,是否开启gzip
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# 上面两个开启基本就能跑起了,下面的愿意折腾就了解一下
gzip_static on;
gzip_proxied any;
gzip_vary on;
gzip_comp_level 6;
gzip_buffers 16 8k;
# gzip_min_length 1k;
gzip_http_version 1.1;
具体位置:
tmul2zf734gvs_61a5e3f352be4ea6905bcf9adc776bd6.jpg                                                       
4.维护页面:
作用:
在系统进行维护升级时,用户打开我们的网站看到的维护页面。
如何配置:
# 系统临时维护请打开下面这行注释,并重启nginx,维护完毕后请注释下年这行,并重启nginx
# rewrite ^(.*)$ /maintainace.html break;
具体位置:
   tmul2zf734gvs_2ce8b1ccf8224c2d8910de5cdc45f18d.jpg                                                       
5.一个ip上线多个网站:
作用:
只有一个ip。利用nginx上线多个网站。例如访问192.168.1.154:8080访问我们的个人博客网站,访问192.168.1.154:8081访问我们的直播网站。
如何配置:
直接复制server块即可,一个server块就代表了一个网站,需要改端口和文件的路径等内容。
# 第一个网站:个人博客项目配置
  server {
   listen       8080;
   root         /data/www/hexo;
   index        index.html;
   location / {
    try_files $uri $uri/ /index.html; # 路由模式history的修改
   }
  }
# 第二个网站:直播网站项目配置
server {
  listen       8081;
  root         /data/www/geov;
  index        index.html;
  location / {}
}
具体位置:
                                       tmul2zf734gvs_2d33fb0ef64348738509c8a9f7229c03.jpg                                                       
注意点:
  • 这里的8081一定要你的服务器开放了这个端口才可以使用,否则你按照这个配置了也会访问不到(让后端去配)。
  • 如果是云服务器(比如阿里云,腾讯云),则需要开放相应的入口为8081,否则用户访问不到。

6.动静分离
作用:
在Web开发中,通常来说,动态资源其实就是指那些后台资源,而静态资源就是指HTML,JavaScript,CSS,img等文件。
一般来说,都需要将动态资源和静态资源分开,将静态资源部署在Nginx上,当一个请求来的时候,如果是静态资源的请求,就直接到nginx配置的静态资源目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给后台应用去处理,从而实现动静分离。
在使用前后端分离之后,可以很大程度的提升静态资源的访问速度,同时在开过程中也可以让前后端开发并行可以有效的提高开发时间,也可以有些的减少联调时间 。
解析:
实际上我们在代理前端的html和接口时就已经做到了动静分离。我们打包后的dist包实际上就是纯静态的资源,所以直接访问nginx静态资源服务器,就不需要经过后台的tomcat。访问接口时,就需要nginx先去访问后台服务器,拿到结果再给到浏览器
                                       tmul2zf734gvs_615755f8363e49c684b566d058f1bb95.jpg                                                       
图解:
                                       tmul2zf734gvs_42e5527f69494ce083584a1f82e54397.jpg                                                       
如何配置(其实是优化,因为一般配置会有动静分离):
假设有比较大的图片等需要放置到服务器上,然后通过nginx来转发。或者是有一个纯前端的开源项目(如pdf.js),也需要放在服务器上。如果放在本地代码包,打包出来体积会很大。
location /image/ {
  root   /var/filecenter/;
}
location /static/ {
  root   /var/filecenter/;
}
location /car/ {
  root   /var/filecenter/;
}
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
  root /Users/dalaoyang/Downloads/static;
}
具体位置:
tmul2zf734gvs_b6694440f6054b54beb257752a65c1a6.jpg
7.其他优化
这里只讲了一些nginx基础的知识和一些基础的优化,基本上够用了。但是如果你需要追求更高的性能,那么可以添加其他的优化,只需要根据一些搜索到的文章内容copy过来就行了,nginx主要还是配置多一些,但是理解了整体结构和脉络的话,其实就还是蛮简单的。这里就不做过多的讲解了。
五.nginx基础命令:安装,启动,重启,关闭
安装nginx:
yum install nginx
看是否有nginx进程:
  1. netstat -anput | grep nginx
复制代码
查看服务器端口占用情况:
  1. netstat -ntlp
复制代码
nginx启动:
  1. nginx
复制代码
nginx重启:
  1. nginx -s reload
复制代码
关闭nginx:
  1. nginx -s stop : 快速停止nginx
  2. nginx -s quit :完整有序的停止nginx
复制代码
查看默认的nginx配置文件路径:
  1. nginx -t
复制代码
注:如果有nginx.conf配置的更改,需要重启nginx配置才会生效。如果只是更改dist包/html,则可以不重启nginx。
#查看nginx状态
systemctl status nginx
#停止nginx服务
service nginx stop
#开启nginx服务
service nginx start
  • 打卡等级:热心大叔
  • 打卡总天数:245
  • 打卡月天数:2
  • 打卡总奖励:7719
  • 最近打卡:2025-12-05 20:56:49

350

主题

557

回帖

1万

积分

管理员

积分
10407
 楼主| 发表于 2024-11-10 01:56:31 | 显示全部楼层
Nginx常用基本配置总结:从入门到实战的全方位指南
一、什么是Nginx
Nginx 是开源的轻量级 Web 服务器、反向代理服务器,以及负载均衡器和 HTTP 缓存器。其特点是高并发,高性能和低内存。
Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,最大能支持 50000 个并发连接数。 Nginx 还支持热部署,它的使用特别容易,几乎可以做到 7x24 小时不间断运行。
二、Nginx 的常用功能
1、正向代理及反向代理
其主要有以下几点区别:
    代理对象不同。正向代理代理的是客户端,反向代理代理的是服务器正向代理帮助客户访问其无法访问的服务器资源,反向代理帮助服务器做负载均衡,另外,由于客户端跟真实服务器不直接接触,能起到一定安全防护的作用。
    架设主体不同。正向代理一般是客户端架设的,比如在自己的机器上装一个代理软件,反向代理一般是服务器架设的,通常是在机器集群中部署个反向代理服务器。
    保护对象不同。正向代理保护对象是客户端,反向代理保护对象是原始资源服务器。
    作用目的不同。正向代理主要目的是解决访问限制问题,而反向代理一方面是作为负载均衡,再就是起到安全防护的作用。
2、负载均衡
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
内置策略为轮询,加权轮询,Ip hash。
扩展策略,就天马行空,只有你想不到的没有他做不到的啦。
我们日常中最常见的三种nginx的负载均衡策略应当为(轮询、权重、ip绑定)。
3、web缓存
Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

三、Nginx配置文件结构
安装nginx的时候默认配置文件位置为/etc/nginx 下,默认的配置文件为nginx.conf ,nginx配置文件在/etc/nginx/nginx.conf
nginx.conf
Nginx服务器的基础配置,默认的配置也存放在nginx.conf中,它的配置文件都是以block的形式组织的,每个block一般都是以括号“{}”来表示的。主要包括全局,event,http,server等设置,event主要定义nginx的工作模式,http提供web功能,server用来设置虚拟主机,server可以存在多个。主要包含以下几个部分:
1、 全局块
主要设置一些影响 nginx 服务器整体运行的配置指令。包括运行 nginx 的用户组,进程存放,日志,配置文件等。
比如: worker_processes 1; worker_processes 值越大,可以支持的并发处理量就越多。
2、events块
events 块涉及的指令主要影响Nginx服务器与用户的网络连接。包括进程最大连接数,数据驱动模型,序列化等。
比如: worker_connections 1024; ,支持的最大连接数。
3、http块
http 块又包括 http 全局块和 server 块,是服务器配置中最频繁的部分,包括配置代理,缓存,日志,第三方模块等,可嵌套多个 server。
server块:配置虚拟主机的相关参数。
location块(URL匹配特定位置的设置):配置请求路由,以及各种页面的处理情况。
upstream(负载均衡服务器设置):指令主要用于负载均衡,设置一系列的后端服务器,upstream后的名称和后面的 proxy_pass要对应起来。
四、配置示例#
  1. #全局配置 =========================================================
  2. #指定nginx运行的用户及用户组,默认为nobody。
  3. #user administrator administrators;  
  4. #允许生成的进程数,默认为1
  5. #worker_processes 2;  
  6. #指定nginx进程运行文件存放地址
  7. #pid /nginx/pid/nginx.pid;  
  8. #定位全局错误日志文件,级别。这个设置可以放入全局块,http块,server块。
  9. #级别以此为:debug|info|notice|warn|error|crit|alert|emerg。
  10. #debug输出最多,crir输出最少,根据实际环境而定
  11. #error_log  logs/error.log;
  12. #error_log  logs/error.log  notice;
  13. #error_log  logs/error.log  info;
  14. #events 配置 =======================================================
  15. events {
  16.     #设置网路连接序列化,防止惊群现象发生,默认为on
  17.     accept_mutex on;   
  18.     #设置一个进程是否同时接受多个网络连接,默认为off
  19.     multi_accept on;  
  20.     #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
  21.     #use epoll;
  22.     #最大连接数,默认为512
  23.     worker_connections  1024;   
  24. }
  25. #http 配置 =========================================================
  26. http {
  27.     #文件扩展名与文件类型映射表
  28.     include       mime.types;   
  29.     #默认文件类型,默认为text/plain
  30.     default_type  application/octet-stream;
  31.     #自定义格式,main为日志格式的名称,可自行设置,后面引用
  32.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  33.     #                            '$status $body_bytes_sent "$http_referer" '
  34.     #                          '"$http_user_agent" "$http_x_forwarded_for"';
  35.     #引用日志main格式   
  36.     #access_log  logs/access.log  main;
  37.     #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
  38.     sendfile on;   
  39.     #连接超时时间,默认为75s,0;  无限时间,可以在http,server,location块。
  40.     keepalive_timeout 65;  
  41.     #开启gzip压缩
  42.     gzip  on;
  43.     #负载均衡服务器设置
  44.     upstream mysvr {   
  45.       server 127.0.0.1:7878;
  46.       server 192.168.10.121:3333 backup;  #热备
  47.     }
  48.     #访问异常页面配置
  49.     error_page 404 https://www.baidu.com;
  50.     #配置虚拟主机的相关参数
  51.     server {
  52.         #单连接请求上限次数。
  53.         keepalive_requests 120;
  54.         #监听端口
  55.         listen       4545;   
  56.         #监听地址,可以是ip,可以是域名
  57.         server_name  127.0.0.1;
  58.         #设置主机基本信息,请求路由,以及各种页面的处理情况   
  59.         location / {  #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
  60.             #根目录
  61.             root   html;
  62.             #设置默认页
  63.             index  index.html index.htm;
  64.             #请求转向mysvr 定义的服务器列表
  65.             #proxy_pass  http://mysvr;  
  66.         }
  67.     }
  68. }
复制代码

五、nginx http模块配置实例及日常使用命令
1、反向代理
server {
        listen       80;   
        server_name  192.168.4.32;   #监听地址
        location  / {      
           root html;  #/html目录
           proxy_pass http://127.0.0.1:8080;  #请求转向
           index  index.html index.htm;      #设置默认页      
        }
    }

2、负载均衡
在浏览器地址栏输入 http://192.168.4.32:80,平均到 5000 和 8080 端口中,实现负载均衡效果。
upstream myserver {   
      server 192.167.4.32:5000;
      server 192.168.4.32:8080;
    }
    server {
        listen       80;   #监听端口
        server_name  192.168.4.32;   #监听地址
   
        location  / {      
           root html;  #html目录
           index index.html index.htm;  #设置默认页
           proxy_pass  http://myserver;  #请求转向 myserver 定义的服务器列表      
        }
    }

3、Log排错
在conf中有两个log地址, 一个定义在全局块 ,一个定义在http的access.log中。
/var/log/nginx/error.log
/var/log/nginx/access.log

4、不重启的情况下加载配置
测试是否写对了:
nginx -t
不重启服务的情况下,加载新的内容:
nginx -s reload

  • 打卡等级:热心大叔
  • 打卡总天数:245
  • 打卡月天数:2
  • 打卡总奖励:7719
  • 最近打卡:2025-12-05 20:56:49

350

主题

557

回帖

1万

积分

管理员

积分
10407
 楼主| 发表于 2024-11-10 02:11:05 | 显示全部楼层
nginx详细参数配置
Nginx (engine x) 是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用 代理服务器 (TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人Igor Sysoev编写。
基本命令
  1. nginx -t     检查配置文件是否有语法错误
  2. nginx -s eload        热加载,重新加载配置文件
  3. nginx -s stop  快速关闭
  4. nginx -s quit           等待工作进程处理完成后关闭
复制代码
制代码搭建好nginx服务器并启动过后,我们先看nginx默认配置,再逐个介绍不同使用场景。

默认配置
    Nginx 安装目录下, 我们复制一份`nginx.conf`成`nginx.conf.default`作为配置文件备份,然后修改`nginx.conf`

# 工作进程的数量
worker_processes  1;
events {
    worker_connections  1024; # 每个工作进程连接数
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    # 日志格式
    log_format  access  '$remote_addr - $remote_user [$time_local] $host "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$clientip"';
    access_log  /srv/log/nginx/access.log  access; # 日志输出目录
    gzip  on;
    sendfile  on;

    # 链接超时时间,自动断开
    keepalive_timeout  60;

    # 虚拟主机
    server {
        listen       8080;
        server_name  localhost; # 浏览器访问域名

        charset utf-8;
        access_log  logs/localhost.access.log  access;

        # 路由
        location / {
            root   www; # 访问根目录
            index  index.html index.htm; # 入口文件
        }
    }

    # 引入其他的配置文件
    include servers/*;
}



搭建站点
    在其他配置文件`servers`目录下,添加新建站点配置文件 xx.conf。
    电脑 hosts 文件添加  127.0.0.1   xx_domian
# 虚拟主机
server {
    listen       8080;
    server_name  xx_domian; # 浏览器访问域名

    charset utf-8;
    access_log  logs/xx_domian.access.log  access;

    # 路由
    location / {
        root   www; # 访问根目录
        index  index.html index.htm; # 入口文件
    }
}



执行命令 nginx -s reload,成功后浏览器访问  xx_domian 就能看到你的页面
根据文件类型设置过期时间
location ~.*\.css$ {
    expires 1d;
    break;
}
location ~.*\.js$ {
    expires 1d;
    break;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    access_log off;
    expires 15d;    #保存15天
    break;
}

# curl -x127.0.0.1:80 -I #测试图片的max-age



禁止文件缓存
开发环境经常改动代码,由于浏览器缓存需要强制刷新才能看到效果。这是我们可以禁止浏览器缓存提高效率
location ~* \.(js|css|png|jpg|gif)$ {
    add_header Cache-Control no-store;
}


防盗链
可以防止文件被其他网站调用
location ~* \.(gif|jpg|png)$ {
    # 只允许 192.168.0.1 请求资源
    valid_referers none blocked 192.168.0.1;
    if ($invalid_referer) {
       rewrite ^/ http://$host/logo.png;
    }
}


静态文件压缩
server {
    # 开启gzip 压缩
    gzip on;
    # 设置gzip所需的http协议最低版本 (HTTP/1.1, HTTP/1.0)
    gzip_http_version 1.1;
    # 设置压缩级别,压缩级别越高压缩时间越长  (1-9)
    gzip_comp_level 4;
    # 设置压缩的最小字节数, 页面Content-Length获取
    gzip_min_length 1000;
    # 设置压缩文件的类型  (text/html)
    gzip_types text/plain application/javascript text/css;
}



执行命令 nginx -s reload,成功后浏览器访问
指定定错误页面
# 根据状态码,返回对于的错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /source/error_page;
}


执行命令 nginx -s reload,成功后浏览器访问
跨域问题
    跨域的定义
    同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。通常不允许不同源间的读操作。
    同源的定义
    如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。
nginx解决跨域的原理
例如:
    前端server域名为:http://xx_domain
    后端server域名为:https://github.com
现在http://xx_domain对https://github.com发起请求一定会出现跨域。
不过只需要启动一个nginx服务器,将server_name设置为xx_domain,然后设置相应的location以拦截前端需要跨域的请求,最后将请求代理回github.com。如下面的配置:

## 配置反向代理的参数
server {
    listen    8080;
    server_name xx_domain

    ## 1. 用户访问 http://xx_domain,则反向代理到 https://github.com
    location / {
        proxy_pass  https://github.com;
        proxy_redirect     off;
        proxy_set_header   Host             $host;        # 传递域名
        proxy_set_header   X-Real-IP        $remote_addr; # 传递ip
        proxy_set_header   X-Scheme         $scheme;      # 传递协议
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}


这样可以完美绕过浏览器的同源策略:github.com访问nginx的github.com属于同源访问,而nginx对服务端转发的请求不会触发浏览器的同源策略。

Nginx配置参数中文详细说明:


  1.     #定义Nginx运行的用户和用户组
  2.     user www www;
  3.     #
  4.     #nginx进程数,建议设置为等于CPU总核心数.
  5.     worker_processes 8;
  6.     #
  7.     #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
  8.     error_log /var/log/nginx/error.log info;
  9.     #
  10.     #进程文件
  11.     pid /var/run/nginx.pid;
  12.     #
  13.     #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致.
  14.     worker_rlimit_nofile 65535;
  15.     #
  16.     #工作模式与连接数上限
  17.     events
  18.     {
  19.     #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型.
  20.     use epoll;
  21.     #单个进程最大连接数(最大连接数=连接数*进程数)
  22.     worker_connections 65535;
  23.     }
  24.     #
  25.     #设定http服务器
  26.     http
  27.     {
  28.     include mime.types; #文件扩展名与文件类型映射表
  29.     default_type application/octet-stream; #默认文件类型
  30.     #charset utf-8; #默认编码
  31.     server_names_hash_bucket_size 128; #服务器名字的hash表大小
  32.     client_header_buffer_size 32k; #上传文件大小限制
  33.     large_client_header_buffers 4 64k; #设定请求缓
  34.     client_max_body_size 8m; #设定请求缓

  35.     # 开启目录列表访问,合适下载服务器,默认关闭.
  36.     autoindex on; # 显示目录
  37.     autoindex_exact_size on; # 显示文件大小 默认为on,显示出文件的确切大小,单位是bytes 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
  38.     autoindex_localtime on; # 显示文件时间 默认为off,显示的文件时间为GMT时间 改为on后,显示的文件时间为文件的服务器时间

  39.     sendfile on; # 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载.注意:如果图片显示不正常把这个改成off.
  40.     tcp_nopush on; # 防止网络阻塞
  41.     tcp_nodelay on; # 防止网络阻塞

  42.     keepalive_timeout 120; # (单位s)设置客户端连接保持活动的超时时间,在超过这个时间后服务器会关闭该链接

  43.     # FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度.下面参数看字面意思都能理解.
  44.     fastcgi_connect_timeout 300;
  45.     fastcgi_send_timeout 300;
  46.     fastcgi_read_timeout 300;
  47.     fastcgi_buffer_size 64k;
  48.     fastcgi_buffers 4 64k;
  49.     fastcgi_busy_buffers_size 128k;
  50.     fastcgi_temp_file_write_size 128k;

  51.     # gzip模块设置
  52.     gzip on; #开启gzip压缩输出
  53.     gzip_min_length 1k; #允许压缩的页面的最小字节数,页面字节数从header偷得content-length中获取.默认是0,不管页面多大都进行压缩.建议设置成大于1k的字节数,小于1k可能会越压越大
  54.     gzip_buffers 4 16k; #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
  55.     gzip_http_version 1.1; #压缩版本(默认1.1,目前大部分浏览器已经支持gzip解压.前端如果是squid2.5请使用1.0)
  56.     gzip_comp_level 2; #压缩等级.1压缩比最小,处理速度快.9压缩比最大,比较消耗cpu资源,处理速度最慢,但是因为压缩比最大,所以包最小,传输速度快
  57.     gzip_types text/plain application/x-javascript text/css application/xml;
  58.     #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn.
  59.     gzip_vary on;#选项可以让前端的缓存服务器缓存经过gzip压缩的页面.例如:用squid缓存经过nginx压缩的数据

  60.     #开启限制IP连接数的时候需要使用
  61.     #limit_zone crawler $binary_remote_addr 10m;

  62.     ##upstream的负载均衡,四种调度算法(下例主讲)##

  63.     #虚拟主机的配置
  64.     server
  65.     {
  66.     # 监听端口
  67.     listen 80;
  68.     # 域名可以有多个,用空格隔开
  69.     server_name ably.com;
  70.     # HTTP 自动跳转 HTTPS
  71.     rewrite ^(.*) https://$server_name$1 permanent;
  72.     }

  73.     server
  74.     {
  75.     # 监听端口 HTTPS
  76.     listen 443 ssl;
  77.     server_name ably.com;

  78.     # 配置域名证书
  79.     ssl_certificate C:\WebServer\Certs\certificate.crt;
  80.     ssl_certificate_key C:\WebServer\Certs\private.key;
  81.     ssl_session_cache shared:SSL:1m;
  82.     ssl_session_timeout 5m;
  83.     ssl_protocols SSLv2 SSLv3 TLSv1;
  84.     ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  85.     ssl_prefer_server_ciphers on;

  86.     index index.html index.htm index.php;
  87.     root /data/www/;
  88.     location ~ .*\.(php|php5)?$
  89.     {
  90.     fastcgi_pass 127.0.0.1:9000;
  91.     fastcgi_index index.php;
  92.     include fastcgi.conf;
  93.     }

  94.     # 配置地址拦截转发,解决跨域验证问题
  95.     location /oauth/{
  96.     proxy_pass https://localhost:13580/oauth/;
  97.     proxy_set_header HOST $host;
  98.     proxy_set_header X-Real-IP $remote_addr;
  99.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  100.     }

  101.     # 图片缓存时间设置
  102.     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  103.     expires 10d;
  104.     }

  105.     # JS和CSS缓存时间设置
  106.     location ~ .*\.(js|css)?$ {
  107.     expires 1h;
  108.     }

  109.     # 日志格式设定
  110.     log_format access '$remote_addr - $remote_user [$time_local] "$request" '
  111.     '$status $body_bytes_sent "$http_referer" '
  112.     '"$http_user_agent" $http_x_forwarded_for';
  113.     # 定义本虚拟主机的访问日志
  114.     access_log /var/log/nginx/access.log access;

  115.     # 设定查看Nginx状态的地址.StubStatus模块能够获取Nginx自上次启动以来的工作状态,此模块非核心模块,需要在Nginx编译安装时手工指定才能使用
  116.     location /NginxStatus {
  117.     stub_status on;
  118.     access_log on;
  119.     auth_basic "NginxStatus";
  120.     auth_basic_user_file conf/htpasswd;
  121.     #htpasswd文件的内容可以用apache提供的htpasswd工具来产生.
  122.     }
  123.     }
  124.     }
  125.     Nginx多台服务器实现负载均衡:
  126.     1.Nginx负载均衡服务器:
  127.     IP:192.168.0.4(Nginx-Server)
  128.     2.Web服务器列表:
  129.     Web1:192.168.0.5(Nginx-Node1/Nginx-Web1) ;Web2:192.168.0.7(Nginx-Node2/Nginx-Web2)
  130.     3.实现目的:用户访问Nginx-Server(“http://mongo.demo.com:8888”)时,通过Nginx负载均衡到Web1和Web2服务器
  131.     Nginx负载均衡服务器的nginx.conf配置注释如下:
  132.     events
  133.     {
  134.     use epoll;
  135.     worker_connections 65535;
  136.     }
  137.     http
  138.     {
  139.     ##upstream的负载均衡,四种调度算法##
  140.     #调度算法1:轮询.每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响
  141.     upstream webhost {
  142.     server 192.168.0.5:6666 ;
  143.     server 192.168.0.7:6666 ;
  144.     }
  145.     #调度算法2:weight(权重).可以根据机器配置定义权重.权重越高被分配到的几率越大
  146.     upstream webhost {
  147.     server 192.168.0.5:6666 weight=2;
  148.     server 192.168.0.7:6666 weight=3;
  149.     }
  150.     #调度算法3:ip_hash. 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题
  151.     upstream webhost {
  152.     ip_hash;
  153.     server 192.168.0.5:6666 ;
  154.     server 192.168.0.7:6666 ;
  155.     }
  156.     #调度算法4:url_hash(需安装第三方插件).此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率.Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包
  157.     upstream webhost {
  158.     server 192.168.0.5:6666 ;
  159.     server 192.168.0.7:6666 ;
  160.     hash $request_uri;
  161.     }
  162.     #调度算法5:fair(需安装第三方插件).这是比上面两个更加智能的负载均衡算法.此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配.Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块
  163.     #
  164.     #虚拟主机的配置(采用调度算法3:ip_hash)
  165.     server
  166.     {
  167.     listen 80;
  168.     server_name mongo.demo.com;
  169.     #对 "/" 启用反向代理
  170.     location / {
  171.     proxy_pass http://webhost;
  172.     proxy_redirect off;
  173.     proxy_set_header X-Real-IP $remote_addr;
  174.     #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
  175.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  176.     #以下是一些反向代理的配置,可选.
  177.     proxy_set_header Host $host;
  178.     client_max_body_size 10m; #允许客户端请求的最大单文件字节数
  179.     client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
  180.     proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
  181.     proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
  182.     proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
  183.     proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
  184.     proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
  185.     proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
  186.     proxy_temp_file_write_size 64k;
  187.     #设定缓存文件夹大小,大于这个值,将从upstream服务器传
  188.     }
  189.     }
  190.     }
  191.     负载均衡操作演示如下:
  192.     操作对象:192.168.0.4(Nginx-Server)

  193.     # 创建文件夹准备存放配置文件
  194.     $ mkdir -p /opt/confs
  195.     $ vim /opt/confs/nginx.conf

  196.     # 编辑内容如下:
  197.     events
  198.     {
  199.     use epoll;
  200.     worker_connections 65535;
  201.     }

  202.     http
  203.     {
  204.     upstream webhost {
  205.     ip_hash;
  206.     server 192.168.0.5:6666 ;
  207.     server 192.168.0.7:6666 ;
  208.     }

  209.     server
  210.     {
  211.     listen 80;
  212.     server_name mongo.demo.com;
  213.     location / {
  214.     proxy_pass http://webhost;
  215.     proxy_redirect off;
  216.     proxy_set_header X-Real-IP $remote_addr;
  217.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  218.     proxy_set_header Host $host;
  219.     client_max_body_size 10m;
  220.     client_body_buffer_size 128k;
  221.     proxy_connect_timeout 90;
  222.     proxy_send_timeout 90;
  223.     proxy_read_timeout 90;
  224.     proxy_buffer_size 4k;
  225.     proxy_buffers 4 32k;
  226.     proxy_busy_buffers_size 64k;
  227.     proxy_temp_file_write_size 64k;
  228.     }
  229.     }
  230.     }
  231.     # 然后保存并退出

  232.     # 启动负载均衡服务器192.168.0.4(Nginx-Server)
  233.     docker run -d -p 8888:80 --name nginx-server -v /opt/confs/nginx.conf:/etc/nginx/nginx.conf --restart always nginx
  234.     操作对象:192.168.0.5(Nginx-Node1/Nginx-Web1)
  235.     # 创建文件夹用于存放web页面
  236.     $ mkdir -p /opt/html
  237.     $ vim /opt/html/index.html

  238.     # 编辑内容如下:
  239.     <div>
  240.     <h1>
  241.     The host is 192.168.0.5(Docker02) - Node 1!
  242.     </h1>
  243.     </div>
  244.     # 然后保存并退出

  245.     # 启动192.168.0.5(Nginx-Node1/Nginx-Web1)
  246.     $ docker run -d -p 6666:80 --name nginx-node1 -v /opt/html:/usr/share/nginx/html --restart always nginx
  247.     操作对象:192.168.0.7(Nginx-Node2/Nginx-Web2)
  248.     # 创建文件夹用于存放web页面
  249.     $ mkdir -p /opt/html
  250.     $ vim /opt/html/index.html

  251.     # 编辑内容如下:
  252.     <div>
  253.     <h1>
  254.     The host is 192.168.0.7(Docker03) - Node 2!
  255.     </h1>
  256.     </div>
  257.     # 然后保存并退出

  258.     # 启动192.168.0.7(Nginx-Node2/Nginx-Web2)
  259.     $ docker run -d -p 6666:80 --name nginx-node2 -v $(pwd)/html:/usr/share/nginx/html --restart always nginx
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2025-12-7 08:44 , Processed in 0.033148 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表