准备工作
安装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许可证

目录结构
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
额外扩展
状态码

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;
}
反向代理(集群)
示例拓扑:

部署
部署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 //使用该命令多次访问查看效果

调度算法
默认:轮询,逐一循环
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共享

步骤一:为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模块

[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

访问dlib/ 会访问目录下的文件
goaccess log日志可视化
yum -y install goaccess


网站后台数据 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:当前多少客户端在等待服务器的响应。

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

被折叠的 条评论
为什么被折叠?



