1、创建用户及用户组

groupadd www
useradd -g www -s /sbin/nologin -M www

2、创建文件夹

mkdir -p /data/{wwwroot,nginx,file}
mkdir -p /data/wwwroot/error

3、安装nginx依赖

yum -y install net-tools wget gcc gcc-c++ zlib-devel pcre-devel make autoconf openssl openssl-devel

4、上传文件

将nginx-1.21.4.tar.gz上传到/data/file目录下面 #也可以采用在线下载方式 wget http://nginx.org/download/nginx-1.21.4.tar.gz
将index.html上传到/data/wwwroot目录下面
将403.html、404.html、50x.html上传到/data/wwwroot/error

5、解压nginx-1.21.4.tar.gz

tar -zxf nginx-1.21.4.tar.gz

6、进入nginx-1.21.4文件当中

cd nginx-1.21.4/

7、编译文件路径

./configure --prefix=/usr/local/nginx
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module #带参的

8、编辑及安装

make && make install

9、上传文件到nginx配置目录下面

将nginx.conf上传到/usr/local/nginx/conf/nginx.conf
在当前路径下面创建vhost文件夹,然后在进入vhost文件夹里面
mkdir -p /usr/local/nginx/conf/vhost
将localhost_80.conf上传到vhost文件夹中

10、授权

chown -R www:www /data/wwwroot
chown -R www:www /data/nginx
chown -R www:www /data/nginx-cache
chown -R www:www /usr/local/nginx

11、设置快捷启动

vi /lib/systemd/system/nginx.service
[Unit]
Description=nginx service
After=network.target 
[Service]   
Type=forking 
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true 
[Install] 
WantedBy=multi-user.target
快捷启动命令
systemctl start nginx.service #启动命令
systemctl status nginx.service #状态命令
systemctl reload nginx.service #重新加载命令
systemctl stop nginx.service #停止命令
注解
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

12、加入开机启动

systemctl enable nginx.service #加入
systemctl disable nginx.service #停止

13、进入防火墙

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

在此nginx源码安装结束,可以采用http://ip访问咯

14、nginx.conf配置

user www;
worker_processes 2; #cat /proc/cpuinfo | grep ^processor | wc -l 查看cpu核数
worker_cpu_affinity auto; #充分利用多核cpu的性能
error_log /data/nginx/error.log; #nginx错误日志
worker_rlimit_nofile 65535; #更改worker进程的最大打开文件数限制
events {
    worker_connections  10240; #每个worker(子进程)可以创建多少个连接,默认1024,最大是65535
    multi_accept on; #设置为on后,多个worker按串行 方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行 方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服 务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。
    use epoll; #使用epoll模型
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on; #开启高效文件传输模式
    tcp_nopush on; #需要在sendfile开启模式才有效,防止网络阻塞,级级的减少网络报文段的数量。将响应头和正文的开始部分一起发送,而不是一个接一个的发送(也就是说数据包不会马上传出等到数据包最大时一次性传)
    map $time_iso8601 $logdate {
        '~^(?<ymd>\\d{4}-\\d{2}-\\d{2})' $ymd;
        default                       'date-not-found';
    }
    map $time_iso8601 $request_times {
        '~^(?<ymdhms>\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})' $ymdhms;
        default                       '~^(?<ymd>\\d{4}-\\d{2}-\\d{2})' $ymd;
    }
    log_format access-upstream '{"host":"$server_addr",'
    '"clientip":"$remote_addr",'
    '"size":$body_bytes_sent,'
    '"responsetime":$request_times,'
    '"http_host":"$host",'
    '"url":"$uri",'
    '"agent":"$http_user_agent",'
    '"status":"$status"}';
    include vhost/*.conf;
    keepalive_timeout 60; #第一次请求和下一次请求都会刷新这个60s
    keepalive_requests 100; #这个表示当我们建立一个可复用长连接,在当前这一个连接里可以并发接收多少个请求,默认1000个
    keepalive_time 60; #一个tcp连接的总时长,超过这个时间要再请求连接一下
    send_timeout 15; #在向客户端发送数据时,建立好连接后,超过两次活动时间(服务器很长时间没有返回数据)那么就会将这个连接关掉
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_zone $server_name zone=perserver:10m;
    limit_conn perip 2;
    limit_conn perserver 20;
    limit_rate 300k; 
    proxy_cache_path /data/nginx levels=1:2 keys_zone=nginx-cache:20m max_size=50g inactive=168h;
    gzip  on;   #表示开启压缩功能
    gzip_min_length 1k; #表示允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值为0,表示不管页面多大都进行压缩,设置建议设大于1k。如果小于1k可能会越压越大。
    gzip_buffers 4 32k; #压缩缓存区大小
    gzip_http_version 1.1; #压缩版本
    gzip_comp_level 6; #压缩比率,一般选择4-6,为了性能gzip_typs text/css text/xml application/javascript; #指>定压缩的类型 gzip_vary on;
    gzip_types text/plain text/css text/javascript application/json application/javascript
    gzip_vary on; #vary header支持,改选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过nginx压缩的数据。
    tcp_nodelay on; #也是防止网络阻塞,不过要包涵在keepalived参数才有效。
    client_header_buffer_size 4k; #客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
    open_file_cache max=65535 inactive=20s; #这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
    open_file_cache_valid 30s; #这个是指多长时间检查一次缓存的有效信息
    open_file_cache_min_uses 1; #open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除
    client_header_timeout 15; #设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个时间没有发送任何数据,nginx将返回request time out的错误
    client_body_timeout 15; #设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据,和上面一样的错误提示。
    reset_timedout_connection on; #告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间
    client_max_body_size  10m; #上传文件大小限制
    client_body_buffer_size 10m; #client_max_body_size client_body_buffer_size相同的值,这样就不会存储临时文件,直接存储在内存了
    large_client_header_buffers 4 64k;
    sendfile_max_chunk 512k;
    server_names_hash_bucket_size 256;
    server_tokens off; #并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的
}

15、解析静态页面

server {
    listen        80 default_server;
    server_name _;
    error_log /data/nginx/localhost_error.log crit;
    access_log /data/nginx/localhost_acess_$logdate.log access-upstream;
    error_page   401 /401.html;
    error_page   403 /403.html;
    error_page   404 /404.html;
    error_page      500 502 503 504 /50x.html;
    location / {
        return 401;
    }
    location = /401.html {
        root "/data/wwwroot/error";
    }
    location = /403.html {
        root "/data/wwwroot/error";
    }
    location = /404.html {
        root "/data/wwwroot/error";
    }
    location = /50x.html {
        root "/data/wwwroot/error";
    }
}