源码部署nginx-1.19.2
Nginx优点
1、可以针对静态资源高速、高并发访问以及缓存。 2、可以使用反向代理加速,并可以进行数据缓存。 3、具有简单负载均衡、节点健康检查和容错功能。 4、支持远程FastCGI、Uwsgi、and Memcached Servers的加速和缓存。 5、支持SSL、TLS、SNI 6、具有模块化的架构:过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI及图像缩放功能,在SSI过滤器中,一个包含多个SSI的页面,如果由FastCGI或反向代理处理,可被并行处理。
具备其他www服务特性
1、支持基于名字、端口以及IP的多虚拟主机站点。 2、支持Keep-alive和pipelined连接。 3、可进行简单、方便、灵活的配置很管理。 4、支持修改Nginx配置,并且在代码上线时可以平滑重启不中断业务访问。 5、可以自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsyslog处理日志。 6、可利用信号控制Nginx进程。 7、支持3xx-5xx http状态码重定向。 8、支持rewrite模块,支持URL重写及正则表达式匹配。 9、基于客户端IP地址和HTTP基本认证的访问控制。 10、支持PTU、DELETE、MKCOL、COPY以及MOVE等较特殊的HTTP请求方法。 11、支持FLV流和MP4流技术产品应用。 12、支持http响应速率限制。 13、支持同一个IP地址的并发连接或请求数限制。
Nginx软件特点
1、基于异步网络I/O模型(epoll、kqueue) 2、具备支持高性能、高并发的特性,并发连接可达数万。 3、对小文件(小于1MB的静态文件)高并发支持很好,性能很高。 4、不支持类似Apache的DSO模式,扩展库必须编译进主机程序(缺点)。 5、进程占用系统资源比较低 6、支持web、反向proxy、cache三大重点功能,并且都很优秀 7、市场份额在逐年增长
nginx有很多种部署方式,这里使用源码编译
1、安装nginx所需要的依赖软件
yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel
2、创建程序依赖用户
useradd www -u 10000 -s /sbin/nologin -M
3、创建安装目录和软件存放目录
mkdir -p /app/nginx/logs/
mkdir -p /app/tools
4、下载软件并编译安装
cd /app/tools wget http://mirrors.sohu.com/nginx/nginx-1.19.2.tar.gz tar xf nginx-1.19.2.tar.gz -C /app/ cd /app/nginx-1.19.2/ ./configure \ --prefix=/app/nginx \ --user=nginx \ --group=nginx \ --http-log-path=/app/nginx/logs/access.log \ --error-log-path=/app/nginx/logs/error.log \ --lock-path=/app/nginx/nginx.lock \ --pid-path=/app/nginx/nginx.pid \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_mp4_module \ --with-pcre-jit \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_sub_module \ --with-stream \ --with-stream_ssl_module make && make install
5、添加环境变量
echo "export PATH=$PATH:/app/nginx/sbin/" >>/etc/profile
6、配置网站监听域名等
mkdir -p /app/nginx/conf/extra mkdir -p /app/nginx/html/www cat >/app/nginx/conf/extra/www.conf<<EOF server { listen 80; server_name www.abc.com; location / { root html/www; index index.html index.htm; } } EOF echo "www" >/app/nginx/html/www/index.html
7、配置使用systemd进行管理
cat >/usr/lib/systemd/system/nginx.service <<EOF [Unit] Description=nginx - high performance web server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/app/nginx/sbin/nginx -c /app/nginx/conf/nginx.conf ExecReload=/app/nginx/sbin/nginx -s reload ExecStop=/app/nginx/sbin/nginx -s stop EOF
或者:
[Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/app/nginx/sbin/nginx ExecReload=/app/nginx/sbin/nginx -s reload ExecStop=/app/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target
注册到系统服务
systemctl disable nginx systemctl daemon-reload systemctl stop nginx systemctl start nginx systemctl restart nginx systemctl enable nginx
添加了环境变量也可以使用便捷方式去使用检查配置文件是否正确和重载配置文件
nginx #启动 nginx -t #检查配置文件是否正确 nginx -s reload #重载配置文件、优雅重启 nginx -s stop #停止服务
配置nginx显示状态信息
cat >/app/nginx/conf/nginx.conf <<EOF user www; worker_processes auto; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #添加的5行内容 location ~ /nginx_status { stub_status on; access_log off; allow all; } } } EOF
包含文件的方式
cat >/app/nginx/conf/nginx.conf <<EOF user www; worker_processes auto; access_log /app/nginx/logs/access.log main; error_log /app/nginx/logs/error.log warn; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #添加的5行内容 location ~ /nginx_status { stub_status on; access_log off; allow all; } } } stream { log_format proxy '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; include /app/nginx/game/entry.conf; } EOF
重启服务
systemctl restart nginx.service
浏览器测试访问结果:http://xxx.xxx.xxx.xxx/nginx_status
Active connections: 2 server accepts handled requests 2 2 1 Reading: 0 Writing: 1 Waiting: 1
说明:
Active connections: 2 表示Nginx正在处理的活动连接数2个。
server 2 表示Nginx启动到现在共处理了9个连接
accepts 2 表示Nginx启动到现在共成功创建9次握手
handled requests 1 表示总共处理了10次请求
Reading:0 读取到客户端的 Header 信息数
Writing:1 返回给客户端 Header 信息数
Waiting:1 已经处理完正在等候下一次请求指令的驻留链接(开启keep-alive的情况下,这个值等于Active-(Reading+Writing))
nginx-ngxtop监控nginx状态
安装相关的软件
yum -y install epel-release && yum -y install python-pip pip install --upgrade pip pip install ngxtop
ngxtop使用参数
ngxtop 参数 print|top|avg|sum ngxtop info 显示日志格式信息 -l <file>或--access-log <file> 设置日志路径 -f <format>或--log-format <format> 设置日志格式,默认格式combined,另外一种较常用格式为common --no-follow 处理以前的日志,实时日志不做处理 -t <seconds> 或 --interval <seconds> 刷新频率,默认2秒 -g <var>或 --group-by <var> 按变量分组,默认显示 request_path -w <var>或 --having <expr> 筛选 [default: 1] -o <var>或 --order-by <var> 输出的排序方式,默认: 访问数 -n <number>或 --limit <number> 显示top多条,默认前top 10条 -a <exp> ...或 --a <exp> ... 对输出字段做处理,可选 sum, avg, min, max -v或 --verbose 详细输出 -d或 --debug debug模式,输出每行及记录 -h或 --help 显示帮助详细 --version 显示版本信息
高级参数
-c <file>或 --config <file> 指定nginx配置文件,自动分析日志格式 -i <filter-expression>或 --filter <filter-expression> 满足表达式的过滤将被处理 -p <filter-expression>或 --pre-filter <filter-expression> in-filter expression to check in pre-parsing phase. 另外一些变量可以在分析时用到,名字含义同日志格式里的设置:remote_addr、remote_user、time_local、request、request_path、status、body_bytes_sent、http_referer、http_user_agent。 按rquest_path且是404的前10请求: ngxtop -l /usr/local/nginx/logs/access.log --no-follow top request_path --filter 'status == 404' 按总bytes sent最高的前10: ngxtop -l /usr/local/nginx/logs/access.log --no-follow --order-by 'avg(bytes_sent) * count' 按remote address进行排序前10: ngxtop -l /usr/local/nginx/logs/access.log --no-follow --group-by remote_addr 显示400或更高返回状态码的且只显示request、status、http_referer这三列信息: ngxtop -l /usr/local/nginx/logs/access.log --no-follow -i 'status >= 400' print request status http_referer 显示bytes_sent平均值且状态码为200且request_path以www开始的前10: ngxtop -l /usr/local/nginx/logs/access.log --no-follow avg bytes_sent --filter 'status == 200 and request_path.startswith("www")' 关于 ngxtop 的更多用法,可通过 ngxtop -h 查询。
执行命令分析日志显示访问状态
[root@node-1 ~]# ngxtop -l /app/nginx/access.log running for 12 seconds, 0 records processed: 0.00 req/sec Summary: | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx | |---------+------------------+-------+-------+-------+-------| | 0 | | 0 | 0 | 0 | 0 | Detailed: | request_path | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx | [root@node-1 ~]# ngxtop -l /app/nginx/access.log --no-follow running for 0 seconds, 0 records processed: 0.00 req/sec Summary: | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx | |---------+------------------+-------+-------+-------+-------| | 0 | | 0 | 0 | 0 | 0 | Detailed: | request_path | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx | |----------------+---------+------------------+-------+-------+-------+-------| [root@node-1 ~]#
nginx-搭建交互式登录访问网站
创建目录和生成账号和密码
yum -y install httpd-tools mkdir /app/nginx/auth htpasswd -c /app/nginx/auth/passwd admin
htpasswd命令选项参数说明
-c 创建一个加密文件; -n 不更新加密文件,只将htpasswd命令加密后的用户名密码显示在屏幕上; -m 默认htpassswd命令采用MD5算法对密码进行加密; -d htpassswd命令采用CRYPT算法对密码进行加密; -p htpassswd命令不对密码进行进行加密,即明文密码; -s htpassswd命令采用SHA算法对密码进行加密; -b htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码; -D 删除指定的用户。
部分参数使用演示
1、新增用户 用法:htpasswd -b [passwdfile] [username] [passwd] htpasswd -b /usr/local/nginx/auth/passwd test 123456 2、删除用户 用法:htpasswd -D [passwdfile] [username] htpasswd -D /usr/local/nginx/auth/passwd test 3、创建文件,添加用户(注意密码文件,否则已存在文件会覆盖原内容) 用法:htpasswd -bc [passedfile] [username] htpasswd -bc /usr/local/nginx/auth/passwd Test 123 cat /usr/local/nginx/auth/passwd
修改配置文件
vim /etc/nginx/nginx.conf server { listen 80 default_server; listen [::]:80 default_server; #下面增加两行,加密用户及文件存放路径 auth_basic "Please input password"; auth_basic_user_file /app/nginx/auth/passwd; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
验证配置文件和重启服务器
nginx -t systemctl restart nginx.service
反向代理
worker_processes auto; events { use epoll; worker_connections 65535; } http { upstream backend{ server 172.16.0.10:8080; server 172.16.0.20:8080; server 172.16.0.30:8080; } server { listen 80; server_name www.abc.com; location / { client_max_body_size 100M; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
目前就整理了这么多
使劲折腾才会有更好的结果!!!!
如有不对请不吝赐教,感谢!
转载请注明出处!