Nginx web服务器搭建及优化

Nginx (“enginx x”)

安装Nginx

配置文件说明

  • 安装目录:/usr/local/nginx/
  • 配置文件:conf/nginx.conf
  • 网页目录:html
  • 日志文件:logs
  • 启动脚本:sbin/nginx

环境:CentOS 7.5,Nginx-1.17.6

安装依赖

yum -y install gcc pcre-devel openssl-devel
# gcc 编译nginx
# pcre-devel 支持正则,nginx的配置文件需要支持正则表达式
# openssl-devel 支持HTTPS加密

安装Nginx

useradd -s /sbin/nologin/ -M nginx       # 创建nginx用户
tar -xf nginx-1.17.6.tar.gz
cd nginx-1.17.6/
./configure \
--prefix=/usr/local/nginx \              # 指定安装目录
--user=nginx \                           # 指定账户名称
--group=nginx \                          # 指定组名称
--with-http_ssl_module                   # 支持HTTPS加密
make && make install 					 # 编译及安装

启动Nginx

cd /usr/local/nginx						 # nginx 安装目录
sbin/nginx                               # 启动nginx
curl localhost	                         # 测试页面

vim /usr/lib/systemd/system/nginx.service# 编写service文件实现开机自启
[Unit]
Description=The Nginx HTTP Server
#描述信息
After=network.target remote-fs.target nss-lookup.target
#指定启动nginx之前需要其他的其他服务,如network.target等
[Service]
Type=forking
#Type为服务的类型,仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
ExecStart=/usr/local/nginx/sbin/nginx
#设置执行systemctl start nginx后需要启动的具体命令.
ExecReload=/usr/local/nginx/sbin/nginx -s reload
#设置执行systemctl reload nginx后需要执行的具体命令.
ExecStop=/bin/kill -s QUIT ${MAINPID}
#设置执行systemctl stop nginx后需要执行的具体命令.
[Install]
WantedBy=multi-user.target

systemctl enable nginx                   # 开机自启

Nginx 优化

nginx.conf 字段说明

worker_processes  1;					 # nginx进程数量,与CPU核心数一致
...
events {
    worker_connections  1024;            # 每个worker最大并发连接数
}
...
server {                                 # 定义虚拟主机
        listen       80;                 # 监听端口
        server_name  localhost;          # 域名
        location / {                     # location块
            root   html;                 # 工作目录
            index  index.html index.htm; # 默认访问页面
            }
        error_page   500 502 503 504  /50x.html;    # 指定状态码指向的页面
        # location ~ \.php$ {            # 配置php解析
        #       ...
        #       }
        }
        ...
        
# server {                               # 配置HTTPS加密
#         443 ssl;
#         server_name  localhost;
        ...
        }
...

开启status模块,查看Nginx连接数等信息

  • –with-http_stub_status_module
killall nginx
cd ~//nginx-1.17.6                        # 重新编译安装,添加status模块
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
make && make install
systemctl start nginx

修改Nginx配置文件

worker_processes  4;

events {
    worker_connections  10000;
}

http{
    server_tokens off;					 # 隐藏版本号
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    # 将客户端IP信息存储名称为one的共享内存,内存空间为10M,每秒一个ip接受一个请求,多余的放入漏斗
    gzip on;                             # 开启压缩传输
	server {
		listen 80;
		server_name localhost;
		limit_req zone=one burst=5;      # 漏斗超过5个请求则报错
		
		location /status {               # 查看nginx连接请求信息
			stub_status on;
		}
		
		if ($request_method !~ ^(GET|POST)$ ) {
                     return 444;         # 客户端使用非GET或POST方法访问网站,则返回错误信息
            }
        
        location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
			expires	30d;                         # 缓存图片等页面
        }
        client_header_buffer_size    1k;         # 默认请求包头信息的缓存
		large_client_header_buffers  2 1k;       # 大请求包头部信息的缓存个数与容量
		client_body_buffer_size      1k;         # 同上
		client_max_body_size         4k;
		...
	}
	...
}



# server {                                

优化内核参数

默认创建最大文件描述符为1024个

ulimit -Hn 100000				         # 设置硬限制(临时)
ulimit -Sn 100000                        # 设置软限制(临时)

测试

curl http://localhost/status

Active connections: 1 
server accepts handled requests
 43 43 1 
Reading: 0 Writing: 1 Waiting: 0
  • Active connections:当前活动的连接数量。

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

  • Handled:已经处理客户端的连接总数量。(一般与accepts一致,除非服务器限制了连接数量)。

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

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

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

  • Waiting:当前多少客户端在等待服务器的响应。

ab -n 20000 -c 20000 http://localhost/
...
Concurrency Level:      20000
Time taken for tests:   1.351 seconds
Complete requests:      20000
Failed requests:        0
Write errors:           0
Total transferred:      16760000 bytes
HTML transferred:       12240000 bytes
Requests per second:    14803.94 [#/sec] (mean)
Time per request:       1350.992 [ms] (mean)
Time per request:       0.068 [ms] (mean, across all concurrent requests)
Transfer rate:          12114.94 [Kbytes/sec] received
...
# 在配置文件注释掉limit_req的情况下,轻松并发20000
# 当然,页面小,本地访问也是主要原因

总结

做完这些,提高了安全,避免一些攻击,加大了并发访问量,当然Nginx还有很多优化,比如删除不必要的模块等,本次介绍并不完善,后续补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值