千家信息网

Nginx优化

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,博文结构Nginx介绍Nginx的核心特点Nginx平滑升级修改Nginx版本信息Nginx虚拟主机配置nginx配置文件location选项的作用配置https访问nginx开启Nginx访问认证一
千家信息网最后更新 2025年01月23日Nginx优化

博文结构
Nginx介绍
Nginx的核心特点
Nginx平滑升级
修改Nginx版本信息
Nginx虚拟主机配置
nginx配置文件location选项的作用
配置https访问nginx
开启Nginx访问认证

一.nginx简介

Nginx是一款轻量级的网页服务器、反向代理服务器以及电子邮件代理服务器。因它的稳定性、丰富的功能集、实例配置文件和低系统资源消耗而闻名。

Nginx已经在俄罗斯最大的门户网站上运行,同时俄罗斯有超过20%的虚拟主机平台采用Nginx作为反向代理服务器;在国内,Nginx已经运行在淘宝、新浪、网易等多家网站使用Nginx作为Web服务器或反向代理服务器。

二.nginx的核心特点

(1)跨平台:Nginx 可以在大多数 OS 编译运行,而且也有 Windows 的版本(2)配置异常简单:非常容易上手(3)非阻塞、高并发连接:官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2~3 万并发连接数。(这得益于 Nginx 使用了最新的 epoll 模型)(4)事件驱动:采用 epoll 模型,支持更大的并发连接(5)Master/Worker 结构:一个 master 进程,生成一个或多个 worker 进程

(6)内存消耗小:处理大并发的请求内存消耗非常小。在 3 万并发连接下,开启的 10 个 Nginx 进程才消耗 150M 内存(15Mx10=150M)(7)内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响 前端访问。 (8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。 (9)稳定性高:用于反向代理,宕机的概率微乎其微

三.nginx平滑升级(案例)

下载软件包

[root@localhost ~]# yum -y install pcre-devel openssl-devel[root@localhost ~]# tar zxf nginx-1.14.0.tar.gz [root@localhost ~]# tar zxf nginx-1.2.4.tar.gz [root@localhost nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module && make && make install[root@localhost nginx-1.14.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/[root@localhost nginx-1.14.0]# nginx[root@localhost nginx-1.14.0]# useradd nginx -s /sbin/nologin -M[root@localhost nginx-1.2.4]# cd nginx-1.2.4/[root@localhost nginx-1.2.4]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module && make[root@localhost nginx-1.2.4]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old[root@localhost nginx-1.2.4]# cp objs/nginx /usr/local/nginx/sbin/[root@localhost nginx-1.2.4]# netstat -anpt | grep nginxtcp        0      0 0.0.0.0:80              0.0.0.0:            LISTEN      17739/nginx: master [root@localhost nginx-1.2.4]# kill -USR2 17739[root@localhost nginx-1.2.4]# nginx -s reload[root@localhost ~]# kill -QUIT 17739            ////平滑的关闭旧版的nginx进程[root@localhost nginx-1.2.4]# nginx -V  \\查看版本nginx version: nginx/1.2.4built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) TLS SNI support enabledconfigure arguments: --prefix=/usr/local/nginx --with-http_ssl_module
  • 关于nginx使用kill命令常用的参数:
QUIT 平滑关闭HUP 平滑重启,重新加载配置文件USR1 重新打开日志文件USR2 平滑升级可执行程序WINCH 平滑关闭工作进程

四.修改nginx版本信息

[root@localhost ~]# vim /usr/src/nginx-1.2.4/src/core//nginx.h                     ………………          //省略部分内容#define nginx_version      1002004#define NGINX_VERSION      "8.8.8.8"                       //根据实际情况修改为自己想要的信息#define NGINX_VER          "xws/" NGINX_VERSION            //同上,注意修改完的lzj[root@localhost ~]# vim /usr/src/nginx-1.2.4/src/http/ngx_http_header_filter_module.c                      ………………          //省略部分内容static char ngx_http_server_string[] = "Server: xws" CRLF;                //与上一个文件中修改的名称一样(lzj)static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;[root@localhost ~]# vim /usr/src/nginx-1.2.4/src/http/ngx_http_special_response.c                      ………………          //省略部分内容                     static u_char ngx_http_error_tail[] ="
xws
" CRLF //注意与上两个文件中修改的lzj要一致"" CRLF"" CRLF;[root@localhost ~]# cd /usr/src/nginx-1.2.4/[root@localhost nginx-1.2.4]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module && make[root@localhost ~]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak[root@localhost ~]# cp /usr/src/nginx-1.2.4/objs/nginx /usr/local/nginx/sbin/[root@localhost ~]# nginx -s stop //停止nginx服务[root@localhost ~]# nginx //开启nginx服务[root@localhost ~]# curl -I 127.0.0.1HTTP/1.1 200 OKServer: xws/8.8.8.8 //查看版本信息Date: Sat, 30 Nov 2019 15:06:32 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Sat, 30 Nov 2019 14:42:09 GMTConnection: keep-aliveAccept-Ranges: bytes

五.实现nginx虚拟主机(不同域名相同ip)

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf \\在http中加入以下http {    include       mime.types;    default_type  application/octet-stream;        server {              \\从这里开始加        listen    80;        server_name      www.accp.com;        location / {        root /accp;        index index.html index.htm;        }        }    server {        listen    80;        server_name      www.bdqn.com;        location / {        root /bdqn;        index index.html index.htm;        }        }[root@localhost ~]# mkdir /bdqn[root@localhost ~]# mkdir /accp[root@localhost ~]# vim /bdqn/index.htmlwww.bdqn.com[root@localhost ~]# vim /accp/index.htmlwww.accp.com[root@localhost ~]# nginx -s reload[root@localhost ~]# vim /etc/hosts192.168.148.130         www.bdqn.com192.168.148.130         www.accp.com[root@localhost ~]# curl www.bdqn.comwww.dbqn.com[root@localhost ~]# curl www.accp.comwww.accp.com

六.nginx配置文件location选项的作用(案例)

  • alias与root的区别
root:实际访问的文件会被拼接URL的路径alias:实际访问的文件路径不会拼接URL的路径
  • 使用root
    [root@localhost /]# vim /usr/local/nginx/conf/nginx.conflocation ^~ /www {        root   /var/www/html;                     //当访问192.168.148.130/www/时,寻找/var/www/html下的www目录下的文件        index  index.html index.htm;    }[root@localhost /]# mkdir -p /var/www/html/www/[root@localhost /]# vim /var/www/html/www/index.htmlwww[root@localhost /]# nginx -s reload
  • 访问如下:

  • 使用alias
[root@localhost /]# vim /usr/local/nginx/conf/nginx.conflocation ^~ /test {            alias   /var/www/html;                        \\寻找/var/www/html下的网页文件            index  index.html index.htm;        }[root@localhost /]# vim /var/www/html/index.htmltest[root@localhost /]# nginx -s reload
  • 访问如下:

  • 匹配指定的后缀时,就重定向到指定的文件
[root@localhost /]# vim /usr/local/nginx/conf/nginx.conf location ~*  \.(gif|jpg|jpeg|png|css|js|ico)$ {        root /webroot/res/;                  \\当访问以上内容结尾的页面就会去找//webroot/res路径下的文件        index index.html index.htm;        }[root@localhost /]# mkdir /webroot/res -p[root@localhost /]# mv u=3485698722\,1702346544\&fm\=26\&gp\=0.jpg /webroot/res/a.png[root@localhost /]# ls /webroot/resa.png[root@localhost /]# nginx -s reload
  • 访问如下:

[root@localhost /]# vim /usr/local/nginx/conf/nginx.conf     location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {         \\这个加入上面的命令上面,要不容易报错        rewrite .(gif|jpg) /error.png;        }[root@localhost /]# mv xxx.jfif /usr/local/nginx/html/error.png[root@localhost /]# ls /usr/local/nginx/html/[root@localhost /]# nginx -s reload
  • 访问如下:


七.配置https访问nginx

  • 开启nginx的https功能,需要编译是添加选项- -with-http_ ssl module

  • http与https区别
    ht tp使用端口号为80,数据传输时使用明文传输,
    https使用443端口,数据传输时使用密文传输,需要ca数字签名才能完成
[root@localhost ca]# mkdir /usr/local/nginx/ca[root@localhost ca]# cd /usr/local/nginx/ca/[root@localhost ca]# openssl genrsa -out ca.key 4096\\一下内容随便填Generating RSA private key, 4096 bit long modulus......................................++.......................++e is 65537 (0x10001)[root@localhost ca]# openssl req -new -x509 -days 7304 -key ca.key -out ca.crtYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:aaState or Province Name (full name) []:ccLocality Name (eg, city) [Default City]:vvOrganization Name (eg, company) [Default Company Ltd]:asOrganizational Unit Name (eg, section) []:dfCommon Name (eg, your name or your server's hostname) []:ffEmail Address []:asd[root@localhost ca]# lsca.crt  ca.key[root@localhost ca]# nginx -s stop [root@localhost ca]# nginx [root@localhost ca]# vim /usr/local/nginx/conf/nginx.conf    server {                      \\原来的server中添加如下:        listen       443 ssl;        server_name  localhost;        ssl_certificate      /usr/local/nginx/ca/ca.crt;  \\证书存放的路径        ssl_certificate_key  /usr/local/nginx/ca/ca.key;  \\密钥存放路径        ssl_session_cache       shared:SSL:1m;        ssl_session_timeout     5m;        access_log      /usr/local/nginx/logs/https-access.log;
  • 访问如下:

  • 开启认证

nginx使用http2版本,需要nginx版本在1. 10以上,安装时需要添加编译选项--with-http v2 module
http2.0版本只能在https上使用,修改上- -步配置文件listen 443 ssl http2;

  • 所以在这之前需要重新编译nginx
[root@localhost nginx-1.14.0]# cd nginx-1.14.0/[root@localhost nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module[root@localhost nginx-1.14.0]# make//开启nginx认证页面 需要使用htpasswd命令生成用户信息[root@localhost /]# yum -y install httpd-tools[root@localhost ~]# htpasswd -c /usr/local/nginx/.passwd xwsNew password: Re-type new password: Adding password for user xws//用户认证信息存放路径是/usr/local/nginx/.passwd//若要向.passwd中添加第二个用户,需要省略"-c"选项,否则会覆盖之前的所有用户。[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf     ...............              //省略部分内容         location / {            root   html;            index  index.html index.htm;            auth_basic "请输入登录账号";     //添加提示语句            auth_basic_user_file /usr/local/nginx/.passwd;    //认证信息存放路径        }
0