linux之源码安装nginx (网站建设软件 简介 基本功能)(一)

源码安装nginx

Nginx简介

是一款开源轻量级的高性能静态资源web服务器、也是非常优秀反向代理服务器、缓存服务器、邮件代理服务器。

最早由俄罗斯程序员伊戈尔·赛索耶夫开发,官方主页http://nginx.org

理念和apache不一样,占用内存少、并发能力强、在中国大陆绝大部分的网站服务器都在使用。

属于web服务器解决方案领域的新贵,市场份额一路上升

Nginx作为web服务器的优点:

1.在高连接,高并发情况下,Nginx是apache的很不错的替代品,理论支持超50000并发。

2.使用异步非阻塞的epoll模型内存消耗很少。

3.配置文件非常简单

4.Rewrite网址重写规则非常强大(正则表达式)

5.内置健康检查功能

6.节省带宽,支持gzip压缩

7.稳定性高

8.模块化设计:模块可以动态编译

9.热部署不停机重载配置文件,性能好。

10.成本低廉(尤其是作为负载均衡)

Nginx基本功能:

静态资源web服务器,http、smtp、pop3协议的反向代理服务器,缓存加速、负载均衡,支持fastcgi(fpm  LNMP),uWSGI(python)等,模块化、过滤器zip、图像的大小调整,支持SSL(TLS)

 

支持Sendfile和sendfile64(从nginx服务端发送文件)sendfile: 设置为on 表示启动高效传输文件的模式。

1.nginx软件yum安装   建立nginx用户  解压安装包

安装方法: 

源码:编译安装

官方的rpm包(基于epel源)

 

源码编译安装nginx步骤:

1:安装基于perl的正则表达式,支持URL重写   

挂载光盘

yum -y install pcre-devel zlib-devel       安装三个软件包

yum -y install openssl-devel如需支持https,支持ssl    

 

2:建立nginx用户

useradd -r nginx               建立用户

3:解压安装包配置  预配置(根据实际情况添加或修改功能)

tar xvf nginx-1.16.0.tar.gz                   --解压安装包(来源先下载到桌面)

cd nginx-1.16.0/   --到目录解压

./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio && make && make install

 

注释:

--prefix=/usr/local/nginx默认安装的路径 

--conf-path=/etc/nginx/nginx.conf 配置文件所在目录

--user=nginx     属主   --group=nginx属组

--error-log-path=/var/log/nginx/error.log   错误日志位置

--http-log-path=/var/log/nginx/access.log   访问日志

--pid-path=/var/run/nginx.pid               pid进程

--lock-path=/var/lock/nginx.lock        进程锁

--user=nginx 运行时的用户

--group=nginx属组

 --with-http_ssl_module支持ssl模块

--with-http_v2_module支持v2模块

--with-http_dav_module

--with-http_stub_status_module支持状态统计模块

--with-threads

--with-file-aio支持多线程

 

2.启动服务路径写到path环境中   nginx直接启动服务 配置生效的方式  可tab出来

启动方法:   /usr/local/nginx/sbin/nginx           或者在/sbin下执行    ./nginx

  

echo '/usr/local/nginx/sbin/' >> /etc/profile     把路径写到PATH环境中  nginx直接启动服务

 

vim /etc/profile

export PATH=$PATH:/usr/local/nginx/sbin                    

/etc/profile文件修改后立即生效 ,可以使用如下命令:

# source /etc/profile

 

nginx                                         --启动

nginx -s reload                               --重新加载配置文件

改动配置生效的方式

nginx -s reload--重新加载,原来配置不变

        stop--停止        然后    nginx    直接启动即可

        quit

        reopen

 nginx -c /etc/nginx/nginx.conf   如果报错

3.主配置文件解读 vim /etc/nginx/nginx.conf   三段

main配置段:全局配置段

event:定义event工作模式工作特性

http 

}:定义http协议相关的配置

配置指令:不区分大小写,但要以分号结尾。支持使用变量,包括:内置变量和自定义变量

1.)全局配置

user  nobody;-----指定运行worker进程的用户和组

worker_processes  1;worker进程的个数通常应略少于CPU物理核心数(可设置为auto)

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;    指定nginx守护进程的PID文件,如果打开,要手动创建并修改权限

要使得这个user  ***用户有可写的权限

 

user USERNAME [group user]  指定运行worker进程的用户和组

user nginx ;

 

 

worker_processes 2;worker进程的个数2通常应略少于CPU物理核心数(可设置为auto

pid  /path/to/pid_file;指定nginx守护进程的PID文件

worker_rlimit_nofile(相当于ulimit -n指定一个worker进程所能够打开的最大文件句柄数

error_log file错误日志,包括日志位置和级别。

 

 

 

 

2.)events事件驱动配置  性能优化相关配置 经常使用的参数

events {

    worker_connections  1024;设定单个worker进程能处理的最大并发连接数量;

}

 

 

 

events事件相关的配置:

use   [epoll|select|poll|rtsig];指明使用的事件模型,建议让nginx自动选择

worker_connections 1024;设定单个worker进程能处理的最大并发连接数量;

 

例如:worker_connections 10240;

 

性能优化相关的配置:

1.)worker_cpu_affinity [cpu mask]  目的在于将worker进程绑定在某些CPU上

cpumask八位数的二进制表示   哪个进程是一就代表cpu分在哪个上面 0001 第一个 0010第二个

例如:00000001 00000010 00000100;

 

2.)time_resolution计时器解析度:降低此值,可减少gettimeofday()系统调用的次数。

(提升nginx性能)

 

3.)worker_priority NUMBER   指明worker进程的优先(nice)值 工作进程优先级

root:-20-->100,user:19-->139

经常需要调整的参数:

worker_processes,  worker_connections,worker_cpu_affinity,worker_priority

 

3.)网站配置localtion  nginx作为web服务器时的配置:

配置框架

   http  {

        upstream {

            ......

                  }

            server {--定义网站,有多少个server  就有多少网站

              location 路径 {--定义这个网页资源 ,root指定资源所在路径位置

                  root “/path/to/somedir”  --root等于网页根目录

                   #类似httpd中的<location>,用于定义URL与本地文件系统的映射关系

 ......

                           }

                Localtion URL { #定位 访问什么什么资源,图片,网页,目录等

                   If ... {

                     ......

                       }

                      ......

}

                  }  #每个server类似apache中的一个虚拟主机定义容器

               server {

                       ......

                       }

                 }

http相关的指令仅仅能放置在http、server、location、upstream、if上下文,

有些指令固定在某些上下文中。

4解读监听端口

1.) listen

指定监听的地址和端口,有两种方式:

listen address[:port]; 指定某个端口的ip

listen port;            指定端口,  所有ip

5.案例:配置两个虚拟主机  80和8080端口  增加解析网站 /etc/hosts

vim /etc/nginx/nginx.conf --主配置文件

 

worker_processes 2;worker进程的个数2通常应略少于CPU物理核心数(可设置为auto

pid  /path/to/pid_file;指定nginx守护进程的PID文件

worker_rlimit_nofile(相当于ulimit -n指定一个worker进程所能够打开的最大文件句柄数

error_log file错误日志,包括日志位置和级别。

 

 

 

 

events {

    worker_connections  1024;设定单个worker进程能处理的最大并发连接数量;

}

 

 

 

 

1.两个server网站:配置指令:

server {

}:   --定义虚拟主机

80端口

      server {

        listen       80;

        server_name  web.ujiuye.com  web;    --定义网站     别名

        access_log  logs/host.access.log  main;  重启时该文件不存在,手动建立并修改属主与属组

        location / {

            root   html;--指定网站根目录  默认为/usr/local/nginx/html下的网页

            index  index.html index.htm;--网页

charset utf-8;   --指定字符集

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

}

 

 

 

 

8080端口

  server {--第二个虚拟主机

        listen       8080;    --侦听端口8080

        server_name  www.ujiuye.com  www;  --别名www

        location / {

            root   /html/www;     --目录不存在,手动建立/html/www,并写index.html

            index  index.html index.htm;

        }

}

vim /etc/hosts  增加解析

 

 

 

 

 

编写测试网站

mkdir -p /html/www

cd www

echo ‘www-kkk’ > index.html

 

 

 

 

 

 

 

验证

nginx  -s reload                       ---重新加载配置文件

curl web.ujiuye.com:8080--访问web8080端口

curl www.ujiuye.com:8080--访问www8080端口

curl www.ujiuye.com

 

 

 

 

 

 

 

 

 

 

 

 

 

查看端口   进程

netstat -antulp | grep :80

ps aux | grep nginx

 

 

 

 

因为之前指定两个进程  所有有一个父进程master    两个子进程

6.指定路径建立测试网页img  创建目录images 检测语法 排错 查看日志

vim /etc/nginx/nginx.conf

location / {                

root   html;    此处的html的绝对路径为 安装根路径下的html,即/usr/local/nginx/html

index  index.html index.htm;

}

 

location /img {      

root   images;   实际对应的目录是:/usr/local/nginx/images/img,注意目录叠加关系

index  index.html index.htm;                --请求的是  http://www.ujiuye.com/images

 }

 

cd /usr/local/nginx/             --到创建

mkdir images

echo images-text > index.html

 

 

 

 

 

/usr/local/nginx/sbin/nginx -t         检测语法错误

/usr/local/nginx/sbin/nginx -s stop   停止

/usr/local/nginx/sbin/nginx  启动

7.编辑正则表达式匹配server   

1.)server_name NAME   [...]       网站名字正则表达式

后面可接多个网站名,名称可用正则表达式(~)或通配符

匹配法则:优先精确匹配

左侧通配符匹配检查:*.xxx.com;      不管左边有多少 只要右边结尾为.xxx.com结尾 就匹配成功

右侧通配符匹配检查:xxx.*;

正则表达式匹配检查:~ ^.*\.xxx\.com$;   ~  +要匹配的正则表达式     检测前面字符串是否和后面正则表达式匹配   *表示可以0次,也可以很多次  \转义字符  表示后面那个点 是点

以任意字符开头, 以.xxx 和.com结尾的  只要有字符串满足他,就匹配正则表达式

2.)root PATH;  网页路径 正则表达式匹配    

设置资源路径映射,用于指明请求的URL所对应的资源的网页根路径

正则表达式

location [ = | ~ | ~* | ^~ ] uri { 配置项}  ^uri匹配正则表达式的方式   定位 或访问某个资源  

location @name { ... }

 

 [ = | ~ | ~* | ^~ ] uri   表示请求的什么资源

 { 配置项}   内容

功能:

允许根据用户请求的URI     来匹配定义的各location,   

匹配到时,此请求被相应的location配置块中的配置所处理,例如访问控制。

匹配优先级:=  ^~  ~  ~*  不带符号

= 精确匹配

^~URI的前半部分匹配不支持正则表达式

~ 正则表达式模式匹配检查,区分字符大小写

~*正则表达式模块匹配检查,不区分字符大小

最后就是不带任何符号的匹配

 

vim /etc/nginx/nginx.conf           --修改配置文件

cd /usr/local/nginx/html           --到目录下创建text目录去创建测试txt

mkdir  text

cd  text

echo 'kkk' > 1.txt

echo 'zzz' > a.text--创建两个测试文本

 

mkdir /usr/local/nginx/vhost/aaa -p   ---创建目录aaa

cd /usr/local/nginx/vhost/aaa

echo 'vvvv'  > index.html --创建测试网页

 

 

location ~* \.(txt|text)$ {               $表示结尾

root   /usr/local/nginx/html/text;  

#访问:http://web.ujiuye.com/1.txt,内容是/usr/local/nginx/html/text/1.txt

index  index.html index.htm;

 }

 

location /aaa {

 root   /usr/local/nginx/vhost;  #最好能指定目录的绝对路径

index  index.html index.htm;

}

 

 

 

 

 

 

 

3.)lias 别名

用于location字段中,用于定义路径别名

 

location /aaa {

alias "/html/test";

index  index.html index.htm;

 }

表示http://xxx.xxx.xxx.xxx/aaa/xxx访问的是/test/xxx,

 

cd /usr/local/nginx/ 

mkdir -p /html/test       创建目录test

cd /html/test/

echo  'kkk' > index.html   创建测试网页

nginx -s reload重新加载

 

 

 

 

 

 

 

 

 

8.index file;指定首页php或者html

lodcation下指定优先网页

index  index.php index.html;

9.error_page  +错误响应码  [...] [=code] URI | @name

错误页面,根据http响应状态码来指定特用的错误页面(也可指定响应码),404.html位于/vhosts/web2

 

 

 

 

例如:

   error_page   500 502 503 504  /50x.html;       响应码500...   返回页面50x.html

        location = /50x.html {             在绝对路径下的的50x.html网页

            root   html;路径

        }

 

error_page 404 /404_customed.html

响应码       回应的内容

10.Nginx访问控制 ip   用户

可以定义在http、server、location范围中

基于IP的访问控制

      allow  允许的ip或网段

      deny  禁止的IP或网段

格式:allow IP/NETWORK

      deny IP/NETWORK     

例如:仅仅允许192.168.10.10访问;

在虚拟主机中配置,如允许本机访问,其他不能访问

vim /etc/nginx/nginx.conf主配置文件

nginx -s reload  重新加载

 

 

 

 

 

 

 

 

基于用户的访问控制

mkdir /etc/nginx/users   

 

htpasswd -c -m /etc/nginx/users/.htpasswd ujiuye

 

 

basic ; digest

auth_basic

auth_basic_user_file     帐号密码文件建议用htpasswd来创建

 

 

 

 

location / {

root   html;

index  index.html index.htm;

auth_basic "author";

auth_basic_user_file "/etc/nginx/users/.htpasswd";

}

11.CA 生成证书https服务发证给NGINX  网页测试查看证书     

1.nginx服务端 在用到证书的主机生成证书请求(生成私钥)

openssl genrsa -out nginx.private_key 2048               生成私钥

2.NGINX服务端生成请求文件,把请求文件传输给CA

openssl req -new -key nginx.private_key -days 365 -out nginx.csr  生成公钥请求文件

 

 

 

 

 

发送给CA服务器 格式scp nginx.csr CA_IP:/root

scp nginx.csr root@192.168.10.11:/root          发送给CA服务器       

 

 

 

 

3.CA服务器签署证书,并将证书发还给请求者

openssl ca -in /root/nginx.csr -out /root/nginx.crt -days 365    签署证书

 

 

 

 

 

 

 

 

4.证书更新,在CA证书目录可以查看更新结果,可选择性把已经签署的证书放置于CA的证书存取库certs目录。

cat /etc/pki/CA/index.txt   cp newcerts/01.pem ../certs/            查看结果,复制文件

5.把证书传输给申请证书的服务机构服务器

将证书发送给nginx服务端格式    scp /root/nginx.crt SERVER_IP:/root

 

scp nginx.crt root@192.168.10.10:/root          --发送给nginx服务端

 

 

 

 

nginx服务端查看

 

 

 

 

 

6.把证书与私钥放置于指定的服务路径,即完整证书认证,提供客户访问。

先在在nginx服务器上:mkdir /etc/nginx/ssl         --创建存放目录

cp /root/nginx.private_key /etc/nginx/ssl           --移动私钥

cp /root/nginx.crt /etc/nginx/ssl --移动证书

 

 

 

 

 

7.查看证书信息

openssl x509 -in /etc/nginx/ssl/nginx.crt -noout -text  |-subject|-serial

cd /etc/nginx/ssl/

ls

 

8.修改配置文件 ,增加私钥位置,证书  创建目录webs和证书测试网站/html/webs  增加解析

vim /etc/nginx/nginx.conf修改配置,增加webs测试证书是否成功

 

mkdir -p /html/webs创建目录

cd /html/webs/

echo 'webskkkk' > index.html创建测试页

vim /etc/hosts             增加解析

 

 

 

 

 

nginx  -s reload   重新加载

 

 

 

 

 

 

 

 

 

8.网页测试 查看是否生成证书

https://192.168.10.10/

 

 

 

 

 

 

 

 

9.查看状态   控制访问如下:

vim /etc/nginx/nginx.conf         --增加访问控制权限

 

stub_status {on|off}  状态统计页面

仅能用于location上下文

 

location /status {

           stub_status on;

           allow 192.168.10.250;    #允许250 vmnet1查看状态 真机和虚拟机接口

           deny all;

        }

 

 

 

 

查看状态

http://192.168.10.10/status

 

 

 

 

状态内容详解:

Active connections: 1           :当前所有处于活动的连接

server accepts handled requests    

276 276 221                  接受的连接、处理过的连接、处理的请求

Reading: 0 Writing: 1 Waiting: 0   :正在接受的请求;请求完成,处于发送响应报文状态;处于活动状态的连接数

 

12.URL重写(用户请求重定向)

1.编写格式:rewrite regex replacement flag;          flag 有什么操作

rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;     

重写  正则表达式   重写目标    标志     满足正则表达式要重写或者重定向一下到后面replacement

 

URL重写在企业中应用广泛,当域名发生更改和迁移可用,以及可以方便SEO优化

 

例如:

rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;         break跳出循环

访问一个资源  images开头 以.jpg结尾  重定向到imgs  $1为(jpg)第一个括号的重定向  

rewrite ^/aaa/(.*).jpg$ /bbb/$1.gif break;

访问一个资源  a'a'a开头 以.jpg结尾  重定向到bbb  $1为(jpg)第一个括号的重定向  

rewrite /(.*)$ https://www.ujiuye123.com/$1 break;

访问资源里面 /    任意名字结尾   都重定向到http....  里面  跳出循环

 

2.flag分类:

①:last:  rewrite规则重写完成,不再被其他规则处理,由浏览器对新规则发起请求,重头开始执行。

②:breakrewrite规则完成,跳出循环。

③:redirect:302状态响应码返回新URL,属于临时重定向。

④:permanent301状态响应码返回新URL,属于永久重定向

 

例如:rewrite ^/discuz/(.*)$ /skyuc/$1 break;  此方式已经实质上属于访问新位置资源,但URL没有被修改。

例如:rewrite ^/discuz/(.*)$ https://web.ujiuye.com/$1 redirect; 此方式属于URL跳转,URL位置已发生改变。

3.location重定向

例子:在主配置文件中设置为当访问网页根路径下的ccc时跳转到根路径下的zzz 

1.修改配置文件

vim /etc/nginx/nginx.conf

 

            location / {

            root   html;

            index  index.html index.htm; 

            rewrite ^/ccc/(.*)$  /ddd/$1 break;

 

 

 

 

 

2.在网页根路径下创建ccc目录及zzz目录 并在zzz目录下创建一个索引页和图片,在索引页中指向图片   

cd /usr/local/nginx/html/

mkdir ccc

mkdir zzz

cd zzz

 

vim index.html

<body>

        <h1>喜欢你</h1>

        <p>再见</p>

        </br>

        <img src="kkk.jpg"></br>

        <a href="http://www.baidu.com">www.baidu.com.com</a>

</body>

 

 

cp kkk.jpg /usr/local/nginx/html/kkk/

 

 

 

 

 

 

http://192.168.10.10/zzz/

http://192.168.10.10/ccc/              会重定向到zzz目录

 

 

 

 

 

 

 

 

访问:http://web.offcn.com/ccc/*  访问/ccc/下的任意资源  重定向到/zzz/下对应  * 资源

 

 

Nginx简介

是一款开源轻量级的高性能静态资源web服务器、也是非常优秀反向代理服务器、缓存服务器、邮件代理服务器。

最早由俄罗斯程序员伊戈尔·赛索耶夫开发,官方主页http://nginx.org

理念和apache不一样,占用内存少、并发能力强、在中国大陆绝大部分的网站服务器都在使用。

属于web服务器解决方案领域的新贵,市场份额一路上升

Nginx作为web服务器的优点:

1.在高连接,高并发情况下,Nginx是apache的很不错的替代品,理论支持超50000并发。

2.使用异步非阻塞的epoll模型内存消耗很少。

3.配置文件非常简单

4.Rewrite网址重写规则非常强大(正则表达式)

5.内置健康检查功能

6.节省带宽,支持gzip压缩

7.稳定性高

8.模块化设计:模块可以动态编译

9.热部署不停机重载配置文件,性能好。

10.成本低廉(尤其是作为负载均衡)

Nginx基本功能:

静态资源web服务器,http、smtp、pop3协议的反向代理服务器,缓存加速、负载均衡,支持fastcgi(fpm  LNMP),uWSGI(python)等,模块化、过滤器zip、图像的大小调整,支持SSL(TLS)

 

支持Sendfile和sendfile64(从nginx服务端发送文件)sendfile: 设置为on 表示启动高效传输文件的模式。

1.nginx软件yum安装   建立nginx用户  解压安装包

安装方法: 

源码:编译安装

官方的rpm包(基于epel源)

 

源码编译安装nginx步骤:

1:安装基于perl的正则表达式,支持URL重写   

挂载光盘

yum -y install pcre-devel zlib-devel       安装三个软件包

yum -y install openssl-devel如需支持https,支持ssl    

 

2:建立nginx用户

useradd -r nginx               建立用户

3:解压安装包配置  预配置(根据实际情况添加或修改功能)

tar xvf nginx-1.16.0.tar.gz                   --解压安装包(来源桌面)

cd nginx-1.16.0/   --到目录解压

./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio && make && make install

 

注释:

--prefix=/usr/local/nginx默认安装的路径 

--conf-path=/etc/nginx/nginx.conf 配置文件所在目录

--user=nginx     属主   --group=nginx属组

--error-log-path=/var/log/nginx/error.log   错误日志位置

--http-log-path=/var/log/nginx/access.log   访问日志

--pid-path=/var/run/nginx.pid               pid进程

--lock-path=/var/lock/nginx.lock        进程锁

--user=nginx 运行时的用户

--group=nginx属组

 --with-http_ssl_module支持ssl模块

--with-http_v2_module支持v2模块

--with-http_dav_module

--with-http_stub_status_module支持状态统计模块

--with-threads

--with-file-aio支持多线程

 

2.启动服务路径写到path环境中   nginx直接启动服务 配置生效的方式  可tab出来

启动方法:   /usr/local/nginx/sbin/nginx           或者在/sbin下执行    ./nginx

  

echo '/usr/local/nginx/sbin/' >> /etc/profile     把路径写到PATH环境中  nginx直接启动服务

 

vim /etc/profile

export PATH=$PATH:/usr/local/nginx/sbin                    

/etc/profile文件修改后立即生效 ,可以使用如下命令:

# source /etc/profile

 

nginx                                         --启动

nginx -s reload                               --重新加载配置文件

改动配置生效的方式

nginx -s reload--重新加载,原来配置不变

        stop--停止        然后    nginx    直接启动即可

        quit

        reopen

 nginx -c /etc/nginx/nginx.conf   如果报错

3.主配置文件解读 vim /etc/nginx/nginx.conf   三段

main配置段:全局配置段

event:定义event工作模式工作特性

http 

}:定义http协议相关的配置

配置指令:不区分大小写,但要以分号结尾。支持使用变量,包括:内置变量和自定义变量

1.)全局配置

user  nobody;-----指定运行worker进程的用户和组

worker_processes  1;worker进程的个数通常应略少于CPU物理核心数(可设置为auto)

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;    指定nginx守护进程的PID文件,如果打开,要手动创建并修改权限

要使得这个user  ***用户有可写的权限

 

user USERNAME [group user]  指定运行worker进程的用户和组

user nginx ;

 

 

worker_processes 2;worker进程的个数2通常应略少于CPU物理核心数(可设置为auto

pid  /path/to/pid_file;指定nginx守护进程的PID文件

worker_rlimit_nofile(相当于ulimit -n指定一个worker进程所能够打开的最大文件句柄数

error_log file错误日志,包括日志位置和级别。

 

2.)events事件驱动配置  性能优化相关配置 经常使用的参数

events {

    worker_connections  1024;设定单个worker进程能处理的最大并发连接数量;

}

events事件相关的配置:

use   [epoll|select|poll|rtsig];指明使用的事件模型,建议让nginx自动选择

worker_connections 1024;设定单个worker进程能处理的最大并发连接数量;

 

例如:worker_connections 10240;

 

性能优化相关的配置:

1.)worker_cpu_affinity [cpu mask]  目的在于将worker进程绑定在某些CPU上

cpumask八位数的二进制表示   哪个进程是一就代表cpu分在哪个上面 0001 第一个 0010第二个

例如:00000001 00000010 00000100;

 

2.)time_resolution计时器解析度:降低此值,可减少gettimeofday()系统调用的次数。

(提升nginx性能)

 

3.)worker_priority NUMBER   指明worker进程的优先(nice)值 工作进程优先级

root:-20-->100,user:19-->139

经常需要调整的参数:

worker_processes,  worker_connections,worker_cpu_affinity,worker_priority

 

3.)网站配置localtion  nginx作为web服务器时的配置:

配置框架

   http  {

        upstream {

            ......

                  }

            server {--定义网站,有多少个server  就有多少网站

              location 路径 {--定义这个网页资源 ,root指定资源所在路径位置

                  root “/path/to/somedir”  --root等于网页根目录

                   #类似httpd中的<location>,用于定义URL与本地文件系统的映射关系

 ......

                           }

                Localtion URL { #定位 访问什么什么资源,图片,网页,目录等

                   If ... {

                     ......

                       }

                      ......

}

                  }  #每个server类似apache中的一个虚拟主机定义容器

               server {

                       ......

                       }

                 }

http相关的指令仅仅能放置在http、server、location、upstream、if上下文,

有些指令固定在某些上下文中。

4解读监听端口

1.) listen

指定监听的地址和端口,有两种方式:

listen address[:port]; 指定某个端口的ip

listen port;            指定端口,  所有ip

5.案例:配置两个虚拟主机  80和8080端口  增加解析网站 /etc/hosts

vim /etc/nginx/nginx.conf --主配置文件

 

worker_processes 2;worker进程的个数2通常应略少于CPU物理核心数(可设置为auto

pid  /path/to/pid_file;指定nginx守护进程的PID文件

worker_rlimit_nofile(相当于ulimit -n指定一个worker进程所能够打开的最大文件句柄数

error_log file错误日志,包括日志位置和级别。

 

events {

    worker_connections  1024;设定单个worker进程能处理的最大并发连接数量;

}

 

1.两个server网站:配置指令:

server {

}:   --定义虚拟主机

80端口

      server {

        listen       80;

        server_name  web.ujiuye.com  web;    --定义网站     别名

        access_log  logs/host.access.log  main;  重启时该文件不存在,手动建立并修改属主与属组

        location / {

            root   html;--指定网站根目录  默认为/usr/local/nginx/html下的网页

            index  index.html index.htm;--网页

charset utf-8;   --指定字符集

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

}

 

8080端口

  server {--第二个虚拟主机

        listen       8080;    --侦听端口8080

        server_name  www.ujiuye.com  www;  --别名www

        location / {

            root   /html/www;     --目录不存在,手动建立/html/www,并写index.html

            index  index.html index.htm;

        }

}

vim /etc/hosts  增加解析

 

 

编写测试网站

mkdir -p /html/www

cd www

echo ‘www-kkk’ > index.html

 

 

验证

nginx  -s reload                       ---重新加载配置文件

curl web.ujiuye.com:8080--访问web8080端口

curl www.ujiuye.com:8080--访问www8080端口

curl www.ujiuye.com

 

 

 

 

 

查看端口   进程

netstat -antulp | grep :80

ps aux | grep nginx

 

因为之前指定两个进程  所有有一个父进程master    两个子进程

6.指定路径建立测试网页img  创建目录images 检测语法 排错 查看日志

vim /etc/nginx/nginx.conf

location / {                

root   html;    此处的html的绝对路径为 安装根路径下的html,即/usr/local/nginx/html

index  index.html index.htm;

}

 

location /img {      

root   images;   实际对应的目录是:/usr/local/nginx/images/img,注意目录叠加关系

index  index.html index.htm;                --请求的是  http://www.ujiuye.com/images

 }

 

cd /usr/local/nginx/             --到创建

mkdir images

echo images-text > index.html

 

 

/usr/local/nginx/sbin/nginx -t         检测语法错误

/usr/local/nginx/sbin/nginx -s stop   停止

/usr/local/nginx/sbin/nginx  启动

7.编辑正则表达式匹配server   

1.)server_name NAME   [...]       网站名字正则表达式

后面可接多个网站名,名称可用正则表达式(~)或通配符

匹配法则:优先精确匹配

左侧通配符匹配检查:*.xxx.com;      不管左边有多少 只要右边结尾为.xxx.com结尾 就匹配成功

右侧通配符匹配检查:xxx.*;

正则表达式匹配检查:~ ^.*\.xxx\.com$;   ~  +要匹配的正则表达式     检测前面字符串是否和后面正则表达式匹配   *表示可以0次,也可以很多次  \转义字符  表示后面那个点 是点

以任意字符开头, 以.xxx 和.com结尾的  只要有字符串满足他,就匹配正则表达式

2.)root PATH;  网页路径 正则表达式匹配    

设置资源路径映射,用于指明请求的URL所对应的资源的网页根路径

正则表达式

location [ = | ~ | ~* | ^~ ] uri { 配置项}  ^uri匹配正则表达式的方式   定位 或访问某个资源  

location @name { ... }

 

 [ = | ~ | ~* | ^~ ] uri   表示请求的什么资源

 { 配置项}   内容

功能:

允许根据用户请求的URI     来匹配定义的各location,   

匹配到时,此请求被相应的location配置块中的配置所处理,例如访问控制。

匹配优先级:=  ^~  ~  ~*  不带符号

= 精确匹配

^~URI的前半部分匹配不支持正则表达式

~ 正则表达式模式匹配检查,区分字符大小写

~*正则表达式模块匹配检查,不区分字符大小

最后就是不带任何符号的匹配

 

vim /etc/nginx/nginx.conf           --修改配置文件

cd /usr/local/nginx/html           --到目录下创建text目录去创建测试txt

mkdir  text

cd  text

echo 'kkk' > 1.txt

echo 'zzz' > a.text--创建两个测试文本

 

mkdir /usr/local/nginx/vhost/aaa -p   ---创建目录aaa

cd /usr/local/nginx/vhost/aaa

echo 'vvvv'  > index.html --创建测试网页

 

 

location ~* \.(txt|text)$ {               $表示结尾

root   /usr/local/nginx/html/text;  

#访问:http://web.ujiuye.com/1.txt,内容是/usr/local/nginx/html/text/1.txt

index  index.html index.htm;

 }

 

location /aaa {

 root   /usr/local/nginx/vhost;  #最好能指定目录的绝对路径

index  index.html index.htm;

}

 

 

 

3.)lias 别名

用于location字段中,用于定义路径别名

 

location /aaa {

alias "/html/test";

index  index.html index.htm;

 }

表示http://xxx.xxx.xxx.xxx/aaa/xxx访问的是/test/xxx,

 

cd /usr/local/nginx/ 

mkdir -p /html/test       创建目录test

cd /html/test/

echo  'kkk' > index.html   创建测试网页

nginx -s reload重新加载

 

 

 

 

8.index file;指定首页php或者html

lodcation下指定优先网页

index  index.php index.html;

9.error_page  +错误响应码  [...] [=code] URI | @name

错误页面,根据http响应状态码来指定特用的错误页面(也可指定响应码),404.html位于/vhosts/web2

 

例如:

   error_page   500 502 503 504  /50x.html;       响应码500...   返回页面50x.html

        location = /50x.html {             在绝对路径下的的50x.html网页

            root   html;路径

        }

 

error_page 404 /404_customed.html

响应码       回应的内容

10.Nginx访问控制 ip   用户

可以定义在http、server、location范围中

基于IP的访问控制

      allow  允许的ip或网段

      deny  禁止的IP或网段

格式:allow IP/NETWORK

      deny IP/NETWORK     

例如:仅仅允许192.168.10.10访问;

在虚拟主机中配置,如允许本机访问,其他不能访问

vim /etc/nginx/nginx.conf主配置文件

nginx -s reload  重新加载

 

 

 

 

 

 

基于用户的访问控制

mkdir /etc/nginx/users   

 

htpasswd -c -m /etc/nginx/users/.htpasswd ujiuye

 

 

basic ; digest

auth_basic

auth_basic_user_file     帐号密码文件建议用htpasswd来创建

 

location / {

root   html;

index  index.html index.htm;

auth_basic "author";

auth_basic_user_file "/etc/nginx/users/.htpasswd";

}

11.CA 生成证书https服务发证给NGINX  网页测试查看证书     

1.nginx服务端 在用到证书的主机生成证书请求(生成私钥)

openssl genrsa -out nginx.private_key 2048               生成私钥

2.NGINX服务端生成请求文件,把请求文件传输给CA

openssl req -new -key nginx.private_key -days 365 -out nginx.csr  生成公钥请求文件

 

 

发送给CA服务器 格式scp nginx.csr CA_IP:/root

scp nginx.csr root@192.168.10.11:/root          发送给CA服务器       

 

3.CA服务器签署证书,并将证书发还给请求者

openssl ca -in /root/nginx.csr -out /root/nginx.crt -days 365    签署证书

 

 

 

4.证书更新,在CA证书目录可以查看更新结果,可选择性把已经签署的证书放置于CA的证书存取库certs目录。

cat /etc/pki/CA/index.txt   cp newcerts/01.pem ../certs/            查看结果,复制文件

5.把证书传输给申请证书的服务机构服务器

将证书发送给nginx服务端格式    scp /root/nginx.crt SERVER_IP:/root

 

scp nginx.crt root@192.168.10.10:/root          --发送给nginx服务端

 

nginx服务端查看

 

 

6.把证书与私钥放置于指定的服务路径,即完整证书认证,提供客户访问。

先在在nginx服务器上:mkdir /etc/nginx/ssl         --创建存放目录

cp /root/nginx.private_key /etc/nginx/ssl           --移动私钥

cp /root/nginx.crt /etc/nginx/ssl --移动证书

 

 

 

7.查看证书信息

openssl x509 -in /etc/nginx/ssl/nginx.crt -noout -text  |-subject|-serial

cd /etc/nginx/ssl/

ls

 

8.修改配置文件 ,增加私钥位置,证书  创建目录webs和证书测试网站/html/webs  增加解析

vim /etc/nginx/nginx.conf修改配置,增加webs测试证书是否成功

 

mkdir -p /html/webs创建目录

cd /html/webs/

echo 'webskkkk' > index.html创建测试页

vim /etc/hosts             增加解析

 

 

nginx  -s reload   重新加载

 

 

 

 

8.网页测试 查看是否生成证书

https://192.168.10.10/

 

 

 

9.查看状态   控制访问如下:

vim /etc/nginx/nginx.conf         --增加访问控制权限

 

stub_status {on|off}  状态统计页面

仅能用于location上下文

 

location /status {

           stub_status on;

           allow 192.168.10.250;    #允许250 vmnet1查看状态 真机和虚拟机接口

           deny all;

        }

 

查看状态

http://192.168.10.10/status

 

状态内容详解:

Active connections: 1           :当前所有处于活动的连接

server accepts handled requests    

276 276 221                  接受的连接、处理过的连接、处理的请求

Reading: 0 Writing: 1 Waiting: 0   :正在接受的请求;请求完成,处于发送响应报文状态;处于活动状态的连接数

 

12.URL重写(用户请求重定向)

1.编写格式:rewrite regex replacement flag;          flag 有什么操作

rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;     

重写  正则表达式   重写目标    标志     满足正则表达式要重写或者重定向一下到后面replacement

 

URL重写在企业中应用广泛,当域名发生更改和迁移可用,以及可以方便SEO优化

 

例如:

rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;         break跳出循环

访问一个资源  images开头 以.jpg结尾  重定向到imgs  $1为(jpg)第一个括号的重定向  

rewrite ^/aaa/(.*).jpg$ /bbb/$1.gif break;

访问一个资源  a'a'a开头 以.jpg结尾  重定向到bbb  $1为(jpg)第一个括号的重定向  

rewrite /(.*)$ https://www.ujiuye123.com/$1 break;

访问资源里面 /    任意名字结尾   都重定向到http....  里面  跳出循环

 

2.flag分类:

①:last:  rewrite规则重写完成,不再被其他规则处理,由浏览器对新规则发起请求,重头开始执行。

②:breakrewrite规则完成,跳出循环。

③:redirect:302状态响应码返回新URL,属于临时重定向。

④:permanent301状态响应码返回新URL,属于永久重定向

 

例如:rewrite ^/discuz/(.*)$ /skyuc/$1 break;  此方式已经实质上属于访问新位置资源,但URL没有被修改。

例如:rewrite ^/discuz/(.*)$ https://web.ujiuye.com/$1 redirect; 此方式属于URL跳转,URL位置已发生改变。

3.location重定向

例子:在主配置文件中设置为当访问网页根路径下的ccc时跳转到根路径下的zzz 

1.修改配置文件

vim /etc/nginx/nginx.conf

 

            location / {

            root   html;

            index  index.html index.htm; 

            rewrite ^/ccc/(.*)$  /ddd/$1 break;

 

 

2.在网页根路径下创建ccc目录及zzz目录 并在zzz目录下创建一个索引页和图片,在索引页中指向图片   

cd /usr/local/nginx/html/

mkdir ccc

mkdir zzz

cd zzz

 

vim index.html

<body>

        <h1>喜欢你</h1>

        <p>再见</p>

        </br>

        <img src="kkk.jpg"></br>

        <a href="http://www.baidu.com">www.baidu.com.com</a>

</body>

 

 

 

cp kkk.jpg /usr/local/nginx/html/kkk/

 

 

 

http://192.168.10.10/zzz/

http://192.168.10.10/ccc/              会重定向到zzz目录

 

 

 

访问:http://web.offcn.com/ccc/*  访问/ccc/下的任意资源  重定向到/zzz/下对应  * 资源

 

 

posted @ 2020-08-01 16:28  浅唱I  阅读(429)  评论(0编辑  收藏  举报