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.网页测试 查看是否生成证书
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规则重写完成,不再被其他规则处理,由浏览器对新规则发起请求,重头开始执行。
②:break:rewrite规则完成,跳出循环。
③:redirect:以302状态响应码返回新URL,属于临时重定向。
④:permanent:以301状态响应码返回新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.网页测试 查看是否生成证书
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规则重写完成,不再被其他规则处理,由浏览器对新规则发起请求,重头开始执行。
②:break:rewrite规则完成,跳出循环。
③:redirect:以302状态响应码返回新URL,属于临时重定向。
④:permanent:以301状态响应码返回新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/下对应 * 资源