例:shell 脚本 ------------> bash 解释器(即:编译)-----------> 运行
可自定义安装路径
自定义安装模块
[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel //安装依赖包
[root@proxy ~]# useradd -s /sbin/nologin nginx
[root@proxy nginx-1.10.3]# ./configure \
> --prefix=/usr/local/nginx \ //指定安装路径
> --user=nginx \ //指定用户
> --group=nginx \ //指定组
> --with-http_ssl_module //开启SSL加密功能
[root@proxy nginx-1.10.3]# make && make install //编译并安装
nginx在源码安装时,如果不指定用户,程序本身会强制自动降级成nobody用户,nobody是Linux默认用户。
[root@proxy ~]# /usr/local/nginx/sbin/nginx //启动服务
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop //关闭服务
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload //重新加载配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx -V //查看软件信息
[root@proxy ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/ //创建快捷方式,并放入PATH中,方便后期可直接使用nginx命令
~]# netstat -atunpl | grep nginx
-a:显示所有端口的信息
-n:以数字格式显示端口号
-t:显示TCP连接的端口
-u:显示UDP连接的端口
-l:显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p:显示监听端口的服务名称是什么(也就是程序名称)
~]# ss -atunpl | grep nginx //显示信息更加详细。
操作步骤:
[root@proxy ~]# tar -xf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \ # 指定安装路径
--user=nginx \ # 指定用户
--group=nginx \ # 指定组
--with-http_ssl_module # 开启SSL加密功能
[root@proxy nginx-1.12.2]# make
[root@proxy ~]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
[root@proxy ~]# cp objs/nginx /usr/local/nginx/sbin/
[root@proxy ~]# make upgrade
或者:
]# killall nginx
]# /usr/local/nginx/sbin/nginx
`在server{
}中添加
server {
auth_basic "input password:"; # 显示的提示信息
auth_basic_user_file "/usr/local/nginx/pass"; # 指定密码文件
}
[root@proxy ~]# yum -y install httpd-tools
[root@proxy ~]# htpasswd -c /usr/local/nginx/pass tom //创建密码文件
#注意:-c :create创建。追加不使用此选项
[root@proxy ~]# htpasswd /usr/local/nginx/pass jerry //追加用户,不能再用-c选项
[root@proxy ~]# cd /usr/local/nginx/conf
[root@proxy ~]# openssl genrsa > cert.key # 生成私钥
[root@proxy ~]# openssl req -new -x509 -key cert.key > cert.pem # 生成证书
# -new 新建 -x509 证书格式
[root@proxy ~]# 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 html;
index index.html index.htm;
}
}
# 格式框架。必须在http{}中。
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http {
server {
listen 端口;
server_name 域名;
location / {
root 网页根目录; # 只填写相对路径即可。
index index.html index.php; # 默认首页,匹配即止。
}
}
}
http{
server {
listen 80;
server_name www.a.com;
rewrite ^/(.*) http://www.tmooc.cn/$1; # 这里的()是:保留,$1则是调用保留。
# 在server_name中已经标明了域名,在rewrite中旧地址中就可以省略前面的域名,只写后面的地址文件,或者用正则表示的文件。如:rewrite a.html b.html;rewrite ^/a b.html;
location / {
rewrite ^/ http://www.tmocc.cn/; # 跳转到首页。
}
}
}
# 在实际使用中,rewrite可以放在location{}里面,也可以在外面,但是都要在server{}里面。根据实际使用对象、场景进行设置。
'在生活中,手机与电脑浏览同一个网站,同一个域名,但是需要调用的页面不一致。'
http {
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html
}
if ($http_user_agent ~* firefox) {
rewrite ^(.*)$ /firefox/$i;
}
}
}
# $http_user_agent 这是Nginx的一个内置变量,存储的信息是:客户端的操作系统和浏览器信息
# IE浏览器:$http_user_agent=msie; 火狐:$http_user_agent=Firefox
location ~ /.* {
xxxx}
location ~ /a.* {
xxxx}
location ~ ^/abc$ {
xxx} = location ~ ^abc$ {
xxx}
# location是用来匹配域名后面的。所以在正则应用中/是可以不写的。
location / {
} # 这个比较特殊。是匹配一切,但优先级最低。可放在任意位置,与位置无关。
server {
listen 80;
server_name www.a.com;
location / {
# "静"
root html;
index index.html;
}
location ~ /.php$ {
# "动"。所有匹配以.php结尾的请求则按此执行。
root html;
fastccgi_pass 127.0.0.1:9000; # 转发给本机9000端口:php解释器
fastcgi_index index.php;
include fastcgi.conf; # 调用其它配置文件
}
}
FastCGI:快速通用网关接口。多进程模式。Nginx结合FastCGI技术即可支持PHP页面架构
查看日志小技巧:
LNMP中的mysql是由PHP脚本连接mysql,一般由PHP开发人员负责写入脚本中,无需要运维人员写相应的脚本。
mysql -e [mysql的命令]:非交互式操作
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
charset utf-8; # 仅需要中文时需要改选项,可选项
error_page 404 /404.html; # 自定义错误页面
.. ..
utf-8:万国编码:是由苹果、IBM等几大公司联合,统一编码,包含全球主流语种。
编码:将人类的语言与计算机语言(二进制)进行对应的码表。
刚开始,只有一个ASCII码表,0~127(英文字母加常用符号)
进入中国后,将中文进行编码:GB2312(国标2312)
状态码 | 功能描述 |
---|---|
200 | 一切正常 |
301 | 永久重定向 |
302 | 临时重定向 |
401 | 用户名或密码错误 |
403 | 禁止访问(客户端 IP 地址被拒绝) |
404 | 文件不存在 |
414 | 请求 URL 头部过长 |
500 | 服务器内部错误 |
502 | Bad Gateway |
单独创建一个:location / {},进行指向一个单独的,由管理员才能登录的网页进行查看。
背景:实际工作中经常需要关注重要参数:并发量,总访问量,等待人数。
专门的模块:stub_status;在源码包安装时加装:–with-http_stub_status_module
[root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf
… …
location /status {
# status只是一个访问名称,自定义
stub_status on;
#allow IP地址;
#deny IP地址;
}
… …
[root@proxy ~]# firefox 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:当前多少客户端在等待服务器的响应。
[root@proxy ~]# yum -y install http-tools # 模拟并发量工具
[root@proxy ~]# ab -c 100 -n 100 http://192.168.4.5/
# -c:模拟人数;-n:总访问次数。 注意:http最后一定要以/结尾
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes 2; # 与CPU核心数量一致
events {
worker_connections 65535; # 每个worker最大并发连接数
}
.. ..
-------------------------------------------------------------------------
worker_processes:nginx启动时的进程数,不能随便写,最多与CPU内核一致(用lscpu可查)
worker_connections:连接数,也是并发量。可大不可小。
# 了解:nginx实验室理论值最大并发量约5万。 65536:linux中最大的端口号。
Linux内核参数中。默认同时打开文件数为1024。
因为客户访问nginx打开页面,就是打开对应的网页文件。
[root@proxy ~]# ulimit -a //查看全部的内核参数。
......
open files (-n) 1024 # 可打开的文件数。(-n)就是修改时要用的选项
.. ..
.. ..
------------------------------------------------------------------
[root@proxy ~]# ulimit -Hn 100000 //H:硬限制,不能超过
[root@proxy ~]# ulimit -Sn 100000 //S:软限制,可打破
#以上为临时设置,可立刻生效。在实际生产中,因为不能随意停机,应这样设置,但还需要设置永久配置。
--------------------------------------------------------------------
[root@proxy ~]# vim /etc/security/limits.conf
.. .. ..
* soft nofile 100000
* hard nofile 100000
限制目标 软、硬 限制的项目(固定格式) 限制值
nofile=number of file
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size 1k; # 默认请求包头信息的缓存
large_client_header_buffers 4 4k; # 大请求包头部信息的缓存个数与容量:4个4K
.. ..
}
# 案例中的设置在以后的工作环境中是足够的。在实验时,由于脚本产生的URL过大,可以设置稍大些。
[root@proxy ~]# cat lnmp_soft/buffer.sh
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {
1..5000}
do
URL=${URL}v$i=$i
done
curl $URL # 经过5000次循环后,生成一个长的URL地址栏
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
# 定义缓存哪些页面
expires 30d; # 定义客户端缓存时间为30天
}
}
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http {
open_file_cache max=2000 inactive=20s; # 最大缓存文件,关闭超时无访问
open_file_cache_valid 60s; # 缓存文件的有效时间。超过即清除
open_file_cache_min_uses 5; # 访问次数超过5次才被缓存
open_file_cache_errors off; # 缓存报错不要写日志
}
# 因为缓存是短时间性的。当有客户端访问时,无法访问到缓存数据就会报错,所以会有大量常规性报错,可无需理会。
开启压缩好处:省流量,速度更快。
注意:一般只压缩文档类型的。不压缩多媒体文件(因为都比较大:如高清照片、电影等)
所有的浏览器都是解压软件,都支持 gzip 解压
压缩比率:0~9。==数字越小,速度越快,效果越差。==一般选中间的。
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http {
.. ..
gzip on; # 开启压缩
gzip_min_length 1000; # 小文件不压缩
gzip_comp_level 4; # 压缩比率
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# 对特定文件压缩,注意:这里的类型不能直接写txt,jpg等,需要参考mime.types
.. ..
}
[root@proxy ~]# cat /usr/local/nginx/conf/mine.types
[root@proxy ~]# cd /usr/local/nginx/logs/
[root@proxy logs]# mv access.log access-20190909.log
[root@proxy ~]# ls /usr/local/nginx/logs/
access.log error.log nginx.pid
[root@proxy logs]# kill -USR1 $(cat nginx.pid) # 这里不是杀死进程,是生成新日志。
# 当nginx启动时,会生成一个nginx.pid的文件,里面存储的就是此时的进程号。
[root@proxy ~]# vim /usr/local/nginx/logbak.sh
#!/bin/bash
date=`date +%Y%m%d`
logpath=/usr/local/nginx/logs
mv $logpath/access.log $logpath/access-$date.log
mv $logpath/error.log $logpath/error-$date.log
kill -USR1 $(cat $logpath/nginx.pid)
[root@proxy ~]# crontab -e
03 03 * * 5 /usr/local/nginx/logbak.sh