Nginx笔记

本文详细介绍LNMP(Linux+Nginx+MySQL+PHP)环境的部署步骤与配置方法,涵盖Nginx编译安装、模块配置、动静分离、反向代理及性能优化等内容。

准备工作

安装Linux常用工具

yum -y install bash-completion //安装支持tab键的包,装完

之后,要退出登录重新进系统才有效

yum list | grep bash //查询与bash名称有关的软件包

yum -y install net-tools //安装网络相关工具,比如ifconfig

yum -y install psmisc //安装支持killall命令软件包

yum -y install vim //安装vim编辑器

yum -y install gcc //安装编译工具

yum -y install pcre-devel //可以让nginx支持正则

yum -y install openssl-devel //支持搭建基于ssl(安全加密)技术的网站

Nginx编译安装

cd nginx-1.17.6 //进入nginx目录

./configure --help | grep http_ssl //配置时,使用help与grep

查询过滤模块部分名,即可找到模块完整名

./configure --prefix=/usr/local/nginx --user=nginx --with-http_ssl_module

//–with-http_ssl_module是安全模块, --prefix是安装路径, --user是

指定的用户,nginx运行时拥有该用户的权限

make //编译

make install //安装

LNMP

部署LNMP环境,有了该环境,nginx就可以很便利的支持动态网站,这也是主流的企业网站平台之一
L:Linux操作系统
N:Nginx网站服务软件
M:MySQL、MariaDB数据库
P:网站开发语言

部署LNMP环境 (Linux、Nginx、MySQL、PHP)

配置

#nginx安装
# yum -y install mariadb-server mariadb mariadb-devel
# yum -y install php php-fpm #FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。
# yum -y install php-mysql

启动服务

# /usr/local/nginx/sbin/nginx
# netstat-utnalp | grep :80

# systemctl start mariadb
# systemctl status madiadb
# netstat -utnalp | grep :3306

# systemctl start php-fpm
# systemctl status php-fpm
# netstat -utnalp | grep :9000

结构与配置

Nginx优点

1.高并发高性能

2.可扩展性好

3.高可靠性

4.热部署

5.BSD许可证

image-20201214083705288

目录结构

ls /usr/local/nginx //查看nginx安装目录
主要目录功能:
conf //存放配置文件
html //存放网站页面
logs //存放日志
sbin //主程序目录

常用命令

useradd nginx -s /sbin/nologin   //创建账户
/usr/local/nginx/sbin/nginx   //开启服务
netstat -ntulp | grep :80   //检查80端口
/usr/local/nginx/sbin/nginx  -V  //查看版本已经添加的功能模块
/usr/local/nginx/sbin/nginx -s stop  //关闭服务
/usr/local/nginx/sbin/nginx -s reload  //重加载配置文件

配置选项

块配置项由一个块配置项名和一对大括号组成

events {…  #注意空格

} 
http {
	upstream backend {
		server 127.0.0.1:8080;
	}
	gzip on;
	server {
			…
			location /webstatic {
								gzip off; #最后,每行配置的结尾需要加上分号。
			}
	}
}

如果配置项值中包括语法符号,比如空格符,那么需要使用单引号或双引号括住配置项值,否则Nginx会报语法错误。例如:

log_format main '$remote_addr - $remote_user [$time_local] "$request" ';

升级加入模块

系统或额外下载的模块

如果是额外添加的模块 下载存放到指定位置

#查看已经编译的参数
/usr/local/nginx/sbin/nginx -V
#例:--prefix=/usr/local/nginx --user=nginx --with-http_ssl_module 

重新编译./configure 如果添加的模块是系统的 如–with-stream

#cd到包的目录下重新编译
./configure --prefix=/usr/local/nginx --user=nginx --with-http_ssl_module --with-stream

make

如果是自己下载的模块

./configure --prefix=/usr/local/nginx --user=nginx --with-http_ssl_module --add-module=/下载的文件的路径

make

千万不要make install 会覆盖安装的!

平滑重启

上一步执行完成后,会在当前目录下生成objs目录,其中的nginx文件即为新的二进制文件

备份原来的文件

cp /usr/local/nginx/sbin/nginx   /usr/local/nginx/sbin/nginx_old.bak

替换文件

cp -f /configure的目录/objs/nginx /usr/local/nginx/sbin/nginx

给正在运行的master进程发送信号要进行平滑升级

ps -ef | grep nginx
root      4326     1  0 16:21 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    4327  4326  0 16:21 ?        00:00:00 nginx: worker process
root      4375 31590  0 16:24 pts/1    00:00:00 grep --color=auto nginx

kill -USR2 4326

kill -USR2 旧版程序的主进程号或进程文件名

此时旧的Nginx主进程将会把自己的进程文件改名为.oldbin,然后执行新版 Nginx。新旧Nginx会同市运行,共同处理请求。

这时要逐步停止旧版 Nginx,输入命令:
kill -WINCH 旧版主进程号
慢慢旧的工作进程就都会随着任务执行完毕而退出,新版的Nginx的工作进程会逐渐取代旧版 工作进程。

kill -WINCH 13195

此 时,我们可以决定使用新版还是恢复到旧版。
不重载配置启动新/旧工作进程
kill -HUP 旧/新版主进程号
从容关闭旧/新进程
kill -QUIT 旧/新主进程号
如果此时报错,提示还有进程没有结束就用下面命令先关闭旧/新工作进程,再关闭主进程号:
kill -TERM 旧/新工作进程号

这样下来,如果要恢复到旧版本,只需要上面的几个步骤都是操作新版主进程号,如果要用新版本就上面的几个步骤都操作旧版主进程号就行了。

正确性检查

/usr/local/nginx/sbin/nginx -t

#重启服务
/usr/local/nginx/sbin/nginx -s reload

#查看编译结果
#/usr/local/nginx/sbin/nginx -V

额外扩展

状态码

image-20201211095149737

kill -usr1

USR1 亦通常被用来告知应用程序重载配置文件;例如,向 Apache HTTP 服务器发送一个 USR1 信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。

listen 127.0.0.1:端口

只有本机才能访问这个端口

404报错优化

客户访问网站时,如果看到了不存在的页面会有404****报错的英文提示,这种

提示很不友好,可以通过自定义页面改善用户体验

首先修改配置文件 大概58~59行附近

error_page 404 /test.jpg; //如果客户访问了不存在的页面

就显示test.jpg的内容

保存退出

找一张图片,内容随意,比如用中文标注"抱歉!您访问的页面不存在" 然后保

存成test.jpg格式,然后拷贝到proxy主机的/usr/local/nginx/html目录下

重新加载nginx配置

使用浏览器足随意访问不存在的页面192.168.2.5/XXXX.html 就可以看到之前

那张图片的内容

配置nginx缓存数据的功能

修改配置文件 在默认的location的下面添加一个新的location

location ~* .(jpg|txt|html|mp4)$ { //当用户访问的是这几种类型的

文件时

expires 30d; //都会缓存在客户机上30天

}

然后使用火狐浏览器,先清空历史记录,然后地址栏输入about:cache

查看disk文件的列表,找到被访问文件看最后倒数第2列(Expires)信息显示多

久超时

优化nginx支持超长地址栏

打开配置文件,在默认的虚拟主机上方添加两行

client_header_buffer_size 200k; //第一行表示,用户访问网站的头部信息(包含地址栏)长度支持200k大小

large_client_header_buffers 4 200k; //第二行表示,如果200k不够,再给4个200k

server {

​ listen 80;

​ server_name localhost;

sbin/nginx -s reload //重加载配置

然后到lnmp_soft目录找到buffer.sh 脚本并运行, 看不到414报错即可

并发访问的优化

并发:多数用户同时对网站发起访问,并发量支持的越高,说明网站性能越强。

默认情况下nginx并发仅仅支持1024个,需要修改配置才能增加

yum -y install httpd-tools //安装支持压力测试命令的软件包

ab -c 1000 -n 1000 http://192.168.2.5/ //使用压力测试工具模拟1000人,一共1000次, 相当于每人访问1次,看到100%的提示说明成功,但是增加到2000之后就不行了


打开nginx配置文件修改第3行,第13行

worker_processes 2;  //开启的nginx进程数量,通常是随cpu的核心数一致

worker_connections 50000;  //每个nginx进程支持的并发访问量 

之后重加载nginx


另外,除了nginx本身对并发量有限制,linux系统本身对文件的访问也有限制,默认情况下linux系统仅允许一个文件同时被打开1024次,普通情况下够用,但是作为网站服务器时,网站页面被多用户同时访问时相当于同时打开,仅仅支持1024显然不够。

永久修改文件访问限制,要在proxy(被测主机)和web1(测试主机)上都配置

vim /etc/security/limits.conf  //修改53、54行,将下列两项内容修改为10万

*   soft  nofile    100000

*   hard  nofile    100000

proxy和web1都重启虚拟机才能生效

ulimit -n //检查系统对文件打开数量的值,默认1024,之后则显示10万

ab -c 2000 -n 2000 http://192.168.2.5/ 再次测试,成功完成任务

防火墙和selinux都要关

特性与功能

LNMP动静分离

配置完LNMP后

65        location ~ \.php$ {   //~是使用正则表达式,匹配以.php结尾
66           root           html;
67           fastcgi_pass   127.0.0.1:9000;   //一旦用户访问了.php结尾的文件,就让nginx找后台的php-fpm(端口号9000)
68           fastcgi_index  index.php;
69         #   fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi  
  _script_name;    //该行需要保持注释状态
70           include        fastcgi.conf;   //这里需要修改名称
71         }

sbin/nginx -s reload   //重新加载nginx配置文件
再使用火狐浏览器访问192.168.2.5/test.php可以看具体页面内容了

虚拟主机

基于域名

修改Nginx服务配置,添加相关虚拟主机配置如下

# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;                                      //端口
        server_name  www.a.com;                                //域名
auth_basic "Input Password:";                        //认证提示符
        auth_basic_user_file "/usr/local/nginx/pass";        //认证密码文件
location / {
            root   html;                                    //指定网站根路径
            index  index.html index.htm;
       }
       
}
… …
    server {
        listen  80;                                        //端口
        server_name  www.b.com;                                //域名
location / { 
root   www;                                 //指定网站根路径
index  index.html index.htm;
}
}

创建网站对应的根目录和首页文件

# mkdir /usr/local/nginx/www
# echo "www" > /usr/local/nginx/www/index.html

重新加载配置

usr/local/nginx/sbin/nginx -s reload
#请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

测试

修改客户端主机的/etc/hosts文件,进行域名解析

# vim /etc/hosts
192.168.4.5    www.a.com  www.b.com

windows的话修改C:\Windows\System32\drivers\etc中

然后远程访问www.a.com和www.b.com即可

基于端口

server {
        listen       8080;                        //端口
        server_name  web1.example.com;          //域名
        ......
}
    server {
        listen       8000;                         //端口
        server_name  web1.example.com;           //域名
      .......
}

基于IP

server {
        listen       192.168.0.1:80;              //IP地址与端口
        server_name  web1.example.com;          //域名
  ... ...
}
    server {
        listen       192.168.0.2:80;             //IP地址与端口
        server_name  web1.example.com;
... ...
}

rewrite重定向

格式 rewrite 旧地址 新地址 选项

rewrite regex replacement [flag];

默认值:无
作用域:server,location,if
如果一个URI匹配指定的正则表达式regex,URI就按照replacement重写。
rewrite按配置文件中出现的顺序执行。flags标志可以停止/继续处理。

redirect 临时重定向

permanent 永久重定向

案例

地址重写测试1: 相同网站内的页面跳转
rewrite ^/a.html$ /b.html;  
sbin/nginx -s reload   //重加载配置文件
使用火狐浏览器访问192.168.2.5/a.html  但看到了b.html的内容
地址重写测试2:相同网站内的页面跳转,地址栏会变化
rewrite ^/a.html$ /b.html redirect;    //添加重定向
使用火狐浏览器访问192.168.2.5/a.html  但看到了b.html的内容,地
址栏也发生变化
地址重写测试3:不同网站的地址跳转
打开nginx主配置文件,在第42行添加
rewrite  /  http://www.baidu.com;   访问老网站,跳转到新的
sbin/nginx -s reload   重加载配置文件
使用火狐浏览器访问192.168.2.5 会跳到baidu.ocom
地址重写测试4:不同网站的相同页面的地址跳转
打开nginx主配置文件,在第42行添加
rewrite  ^/(.*)$  http://www.baidu.com/$1;   //访问老网站的某个页面时,跳转到
新网站对应的相同页面。前面使用正则表达式匹配用户输入的任意页面,并保存
起来(小括号在正则中的效果是保留,相当于保存复制),后面使用$1将之前保
存的页面地址粘贴到新网站
sbin/nginx -s reload   //重加载配置文件
使用火狐浏览器访问192.168.2.5/a.html可以转到www.baidu.com/a.html (由于该网
站没有a.html页面,会出现404报错属于正常)
地址重写测试5:根据用户的情况决定跳转到什么样的页面(本实验按照不同浏览器
决定显示内容,在访问的网址相同的情况下,火狐浏览器看到的是专属页面,其他浏览器
看到的是另一个页面)
cd /usr/local/nginx
mkdir  html/firefox   //创建火狐浏览器专属文件的目录
echo "nginx firefox~~" > html/firefox/test.html  //准备火狐专用页面
echo "nginx other~~"  > html/test.html  //准备普通浏览器使用的页面
vim conf/nginx.conf  //删除原有地址重写的配置,然后在原位置添加以下内容
if ($http_user_agent ~* firefox) {   //如果用户的浏览器使用了火狐,就执行下面的rewrite任务,~代表匹配正则,*是不区分大小写,$http_user_agent是nginx的内置变量,存储了用户的信息,比如用的什么浏览器
rewrite ^/(.*)$  /firefox/$1;     //如果用户浏览器是火狐就跳转到火狐专用目录的页面
}
sbin/nginx -s reload   重加载配置文件
分别使用火狐浏览器与其他浏览器访问192.168.2.5/test.html,可以得到两个不同页面内容则成功

地址重写相关选项

last 不再读其他rewrite

break 不再读其他语句

redirect 临时重定向 状态码 302

permanent 永久重定向 状态码 301

301和302

cd /usr/local/nginx
echo "nginx A~~" > html/a.html
echo "nginx B~~" > html/b.html
echo "nginx C~~" > html/c.html
cd conf
cp nginx.conf.default nginx.conf  //把配置文件恢复默认
cd ..
vim conf/nginx.conf    //修改配置
rewrite /a.html /b.html redirect;   //在42行添加
然后开启或者重加载nginx服务

rewrite /a.html /b.html permanent;  //再次修改配置
重加载nginx服务
curl 192.168.2.5/a.html   //此时看到的页面也是b,说明redirect与permanent效果在客户机看来是一样的,但是状态码不一样,对于搜索引擎来说更关心301的

last和break的区别

location /break/ {  
     rewrite ^/break/(.*) /test/$1 break;  
     return 404;  
}  
  
location /last/ {  
     rewrite ^/last/(.*) /test/$1 last;  
     return 403;  
}  
  
location /test/ {  
     return 508;  
}  

请求: http://xxxx/break/*
返回:404

请求: http://xxxx/last/*
返回:508

原因:根据上述内容,break与last都停止处理后续rewrite指令集,不同之处在与last会重新发起新的请求,而break不会。当请求break时,如匹配内容存在的话,可以直接请求成功,返回200;而如果请求内容不存在,则返回404。当请求为last的时候,会对重写的新uri重新发起请求,如上例则返回508。

总结:last与break都停止处理后续rewrite指令集,最大的不同是,last会重新发起一个新请求,并重新匹配location。

last 不再读其他rewrite
打开主配置文件,在42行修改
rewrite /a.html /b.html last;  //如果没有last,看a页面会得到c页面的内容,加了last之后,就不会再读后面的rewrite了
rewrite /b.html /c.html;
sbin/nginx -s reload   //重加载nginx服务,使用火狐访问192.168.2.5/a.html 看到的是b页面

break  不再读其他语句
按下列方式修改配置文件,将默认的location中加入rewrite语句,然后
再创建一个新的location也加入rewrite语句
location / {
rewrite /a.html /b.html break;    //如果这里的选项依然用last,则仅仅会阻止该location之内的rewrite语句,换成break就可以阻止之后的所有rewrite语句
            root   html;
            index  index.html index.htm;
        }
        location /b.html {
rewrite /b.html /c.html;
        }

反向代理(集群)

示例拓扑:

img

部署

部署web1和web2:

[root@web1 ~]# yum  -y  install  httpd
[root@web1 ~]# echo "192.168.2.100 web1" > /var/www/html/index.html
[root@web1 ~]# systemctl restart httpd

[root@web2 ~]# yum  -y  install  httpd
[root@web2 ~]# echo "192.168.2.200 web2" > /var/www/html/index.html
[root@web2 ~]# systemctl restart httpd

部署nginx服务器。添加服务器迟,实现反向代理

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
#使用upstream定义后端服务器集群,集群名称任意(如webserver)
#使用server定义集群中的具体服务器和端口
upstream webserver {
                server 192.168.2.100:80;
                server 192.168.2.200:80;
        }
.. ..
server {
        listen        80;
        server_name  localhost;   #web主机名
            location / {
#通过proxy_pass将用户的请求转发给webserver集群
            proxy_pass http://webserver;
        }
}

#重新加载配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

客户端使用浏览器访问代理服务器测试轮询效果

[root@client ~]# curl http://192.168.4.5       //使用该命令多次访问查看效果
[root@client ~]# curl http://192.168.4.5      //使用该命令多次访问查看效果

img

调度算法

默认:轮询,逐一循环

wegiht:指定轮询几率权重,权重值与访问比例成正比

ip_hash:根据客户端IP分配固定的后端服务器

所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了。ip_hash能够达到保持会话的效果。

使用ip_hash指令无法保证后端服务器的负载均衡,可能有些后端服务器接收的请求多,有些后端服务器收到的请求少,而且设置后端服务权重等方法将不起作用。

服务器主机状态

down:标识当前server暂时不参与负载

max_fails:允许请求失败的次数,默认为1

fail_timeout: max_fials次失败后,暂停提供服务的时间

案例

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
				#ip hash; #设置Ip_hash后权重不起作用
                server 192.168.2.100 weight=1 max_fails=1 fail_timeout=30;
                server 192.168.2.200 weight=2 max_fails=2 fail_timeout=30;
                server 192.168.2.101 down;
        }
#weight设置服务器权重值,默认值为1
#max_fails设置最大失败次数,测试服务器几次才确认服务器失败
#fail_timeout设置失败超时时间,单位为秒
#down标记服务器已关机,不参与集群调度
.. ..
server {
        listen        80;
        server_name  localhost;
            location / {
            proxy_pass http://webserver;
        }
}

session与cookies

Session:存储在服务器端,保存用户名、登陆状态等信息。

Cookies:由服务器下发给客户端,保存在客户端的一个文件里。

保存的内容主要包括:SessionID。

安装LNMP与配置动静分离

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
upstream webs  {
        server 192.168.2.100:80;
        server 192.168.2.200:80;
  }
 server  {
          listen       80;
          server_name  localhost;
          location  /  {
              proxy_pass http://webs;
            root   html;
            index  index.php index.html index.htm;
          }
}
[root@web1 nginx]# cd ~/lnmp_soft/php_scripts/
[root@web1 php_scripts]# tar -xf php-memcached-demo.tar.gz   
cp -r php-memcached-demo/* /usr/local/nginx/html/   //拷贝测试页面到nginx中
查看有两个关键页面:
index.php   登录入口页面
home.php   登录后页面
http://192.168.2.100/home.php   //直接无法访问,必须先登录
ls /var/lib/php/session/   //登录之后查看服务器session目录可以看到session
文件,以为有该文件,用户再次访问home页面无需重复登录,如果将该目录下的
session文件删除,则用户需要重新登录,用户那边也可以清空浏览器的历史记录
(其中包含Cookies),也需要再次登录.
yum -y reinstall php  //如果不小心删除session目录,需要重装php软件包

memcached 利用内存存储数据的高性能数据库服务

在RHEL7系统光盘中包含有memcached,因此需要提前配置yum源,即可直接使用yum安装,客户端测试时需要提前安装telnet远程工具。

验证时需要客户端主机安装telnet,远程memcached来验证服务器的功能:

add name 0 180 10 //变量不存在则添加
set name 0 180 10 //添加或替换变量
replace name 0 180 10 //替换
get name //读取变量
delete name //删除变量
flush_all //清空所有
提示:0表示不压缩,180为数据缓存时间,10为需要存储的数据字节数量。

memcached配置文件**(查看即可,不需要修改)**

[root@proxy ~]# vim /usr/lib/systemd/system/memcached.service
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS
[root@proxy ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
启动服务并查看网络连接状态验证是否开启成功:

ss命令可以查看系统中启动的端口信息,该命令常用选项如下:

-a显示所有端口的信息

-n以数字格式显示端口号

-t显示TCP连接的端口

-u显示UDP连接的端口

-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p显示监听端口的服务名称是什么(也就是程序名称)

注意:在RHEL7系统中,使用ss命令可以替代netstat,功能与选项一样。
[root@proxy ~]# telnet  192.168.4.5  11211
Trying 192.168.4.5...
……
##提示:0表示不压缩,180为数据缓存时间,3为需要存储的数据字节数量。
set name 0 180 3                //定义变量,变量名称为name
plj                            //输入变量的值,值为plj                
STORED
get name                        //获取变量的值
VALUE name 0 3                 //输出结果
plj
END
##提示:0表示不压缩,180为数据缓存时间,3为需要存储的数据字节数量。
add myname 0 180 10            //新建,myname不存在则添加,存在则报错
set myname 0 180 10            //添加或替换变量
replace myname 0 180 10        //替换,如果myname不存在则报错
get myname                    //读取变量
delete myname                    //删除变量
flush_all                        //清空所有
quit                            //退出登录     

PHP实现session共享

img

步骤一:为Web服务器安装PHP扩展

1)为web1主机的PHP添加memcache扩展

[root@web1 ~]# yum -y install  php-pecl-memcache[root@web1 ~]
# systemctl restart php-fpm

2)为web2主机的PHP添加memcache扩展

[root@web2 ~]# yum -y install  php-pecl-memcache[root@web2 ~]
# systemctl restart php-fpm

步骤二:在后端LNMP服务器上部署Session共享

注意:这些操作在两台后端Web服务器上均需要执行,以下操作以Web1(192.168.2.100)服务器为例。

1)修改PHP-FPM配置文件,并重启服务

注意,因为后端两台web服务器(web1,web2)都需要修改配置文件(下面也web1为例)。

[root@web1 ~]# vim  /etc/php-fpm.d/www.conf       //修改该配置文件的两个参数
//文件的最后2行
修改前效果如下:
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
//原始文件,默认定义Sessoin会话信息本地计算机(默认在/var/lib/php/session)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
修改后效果如下:
php_value[session.save_handler] = memcache
php_value[session.save_path] = "tcp://192.168.2.5:11211"
//定义Session信息存储在公共的memcached服务器上,主机参数中为memcache(没有d)
//通过path参数定义公共的memcached服务器在哪(服务器的IP和端口)
[root@web1 ~]# systemctl  restart  php-fpm

步骤三:客户端测试

客户端使用浏览器访问两台不同的Web服务器。

最终可以获得相关的Session ID信息。

模块

认证功能

vim conf/nginx.conf
auth_basic  "password:";  //提示信息,用户登录网站时看到的
auth_basic_user_file  "/usr/local/nginx/pass";  //存放用户名密码的文件路径

yum -y install httpd-tools  //安装网站工具包,支持htpasswd命令
htpasswd -c /usr/local/nginx/pass  tom   //创建网站的用户与密码文件,第1
个用户名为tom(可以自定义),之后输入2次密码
sbin/nginx -s reload  //如果nginx服务已经开启,就重加载配,如果未开启,就开启
即可
htpasswd  /usr/local/nginx/pass abc  //追加新账户,无需c选项

SSL加密

创建私钥与证书

# cd /usr/local/nginx/conf
# openssl genrsa > cert.key                            //生成私钥
# openssl req -new -x509 -key cert.key > cert.pem      //生成证书
根据刚刚创建的私钥,再创建证书(包含了公钥),生成过程会询问诸如你在哪个国家之类的问题,可以随意回答,但要走完全过程
Country Name (2 letter code) [XX]:dc			国家名称
State or Province Name (full name) []:dc		省份名称
Locality Name (eg, city) [Default City]:dc        城市名称
Organization Name (eg, company) [Default Company Ltd]:dc    公司名称
Organizational Unit Name (eg, section) []:dc     部门名称
Common Name (eg, your name or your server's hostname) []:dc    服务器名称
Email Address []:dc@dc.com     邮件地址

修改Nginx配置文件,设置加密网站的虚拟主机

# vim  /usr/local/nginx/conf/nginx.conf
… …    
server {
        listen       443 ssl;
        server_name            www.c.com;  //修改域名
        ssl_certificate      cert.pem;         //这里是证书文件
        ssl_certificate_key  cert.key;         //这里是私钥文件
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
           	root   c;     //这里修改页面存储目录
            index  index.html index.htm;
        }
    }

重新加载配置文件并访问

# /usr/local/nginx/sbin/nginx -s reload
mkdir c
echo "nginx web C~~" > c/index.html
curl -k https://www.c.com   //访问c网站测试,k选项是忽略风险提示,自己随意创建的加密网站,通常浏览器可能会认为不合法有危险
或使用火狐浏览器访问https://www.c.com/   看到提示---高级---接收风险并继续
另外,如果实验还是无法成功,可以先用killall nginx杀掉程序,从新开启再测试

TCP/UDP调度器 如转发ssh请求

nginx编译安装时需要使用–with-stream,开启ngx_stream_core_module模块

image-20201217093711460

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
stream {
            upstream backend {
               server 192.168.2.100:22;   //后端SSH服务器的IP和端口
               server 192.168.2.200:22;
			}
            server {
                listen 12345;                    //Nginx监听的端口
                 proxy_pass backend;
             }
}
http {
.. ..
}
[root@proxy nginx]# ssh 192.168.2.5 -p 12345

autoindex 访问目录结构

模块:ngx_http_autoindex_module

image-20201212171239402

访问dlib/ 会访问目录下的文件

goaccess log日志可视化

yum -y install goaccess

image-20201214083817394

img

网站后台数据 stub_status_module

编译安装时使用–with-http_stub_status_module开启状态页面模块

ss命令可以查看系统中启动的端口信息,该命令常用选项如下:

-a显示所有端口的信息

-n以数字格式显示端口号

-t显示TCP连接的端口

-u显示UDP连接的端口

-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p显示监听端口的服务名称是什么(也就是程序名称)
[root@proxy ~]# /usr/local/nginx/sbin/nginx
[root@proxy ~]# netstat  -anptu  |  grep nginx
tcp        0        0 0.0.0.0:80        0.0.0.0:*        LISTEN        10441/nginx
[root@proxy ~]# ss  -anptu  |  grep nginx
tcp    LISTEN     0      128       *:80                    *:*                   users:(("nginx",pid=7061,fd=6),("nginx",pid=1869,fd=6))
[root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf
… …
location /status {
                stub_status on;
                 #allow IP地址;
                 #deny IP地址;
        }
… …
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
[root@proxy ~]# curl  http://192.168.4.5/status
Active connections: 1 
server accepts handled requests
 10 10 3 
Reading: 0 Writing: 1 Waiting: 0
Active connections:当前活动的连接数量。

Accepts:已经接受客户端的连接总数量。

Handled:已经处理客户端的连接总数量。

(一般与accepts一致,除非服务器限制了连接数量)。

Requests:客户端发送的请求数量。

Reading:当前服务器正在读取客户端请求头的数量。

Writing:当前服务器正在写响应信息的数量。

Waiting:当前多少客户端在等待服务器的响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值