Nginx 安装

1、Nginx 简易安装
安装软件

下载nginx软件包:nginx-1.22.1.tar.gz

# 解压nginx软件包
tar -zxvf nginx-1.22.1.tar.gz -C /usr/local/src
cd /usr/local/src/nginx-1.22.1/

# 安装编译环境
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel

# 预编译
./configure --prefix=/usr/local/nginx

# 编译安装
make
make install
启动服务

注意:启动服务前修改一下配置文件(80端口被占用),修改nginx的端口为8081。同时关闭firewalld和selinux。

# 修改配置文件端口
vim /usr/local/nginx/conf/nginx.conf

# 进入启动目录,启动服务
cd /usr/local/nginx/sbin
./nginx

# 快速停止
./nginx -s stop
# 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s quit	
# 重新加载配置
./nginx -s reload
服务脚本

① 编辑服务文件:vim /usr/lib/systemd/system/nginx.service(输入a)

[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

② 加载服务并重启

# 重新加载系统服务
systemctl daemon-reload

# 查看之前的nginx服务进程,将其干掉
ps -ef | grep nginx
kill -9 xxxx

# 重启服务
systemctl restart nginx
# 设置开机自启动
systemctl enable nginx
# 查看nginx状态
systemctl status nginx

Nginx 安装_第1张图片

2、Nginx 源码安装
下载解压
# 下载软件
wget http://nginx.org/download/nginx-1.22.0.tar.gz
tar -zxvf nginx-1.22.0.tar.gz -C /usr/local/src
cd /usr/local/src/nginx-1.22.0/

# 安装nginx依赖包
yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
更改源码隐藏软件名称和版本号
vim src/core/nginx.h 

Nginx 安装_第2张图片

vim src/http/ngx_http_header_filter_module.c

vim src/http/ngx_http_special_response.c
# 第29行
"
web
" CRLF "" CRLF "" CRLF ;
  • 这个文件定义了 http 错误码的返回,有时候我们页面程序出现错误,Nginx 会代我们返回相应的错误代码,回显的时候,会带上 nginx 和版本号,我们把他隐藏起来。
编译安装启动
# 预编译
./configure --prefix=/usr/local/nginx --with-http_dav_module \
--with-http_stub_status_module --with-http_addition_module \
--with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre \
--with-http_ssl_module --with-http_gzip_static_module
  • --with-http_dav_module #启用支持(增加 PUT,DELETE,MKCOL:创建集合,COPY 和 MOVE 方法)。默认关闭,需要编译开启
  • --with-http_stub_status_module #获取 Nginx 的状态统计信息
  • --with-http_addition_module #作为一个输出过滤器,支持不完全缓冲,分部分 响应请求
  • --with-http_sub_module #允许一些其他文本替换 Nginx 相应中的一些文本
  • --with-http_flv_module #提供支持 flv 视频文件支持
  • --with-http_mp4_module #提供支持 mp4 视频文件支持,提供伪流媒体服务 端支持
  • --with-http_ssl_module #启用 ngx_http_ssl_module
  • --with-pcre

注意:如果 pcre 是通过编译安装的,需要指定 pcre 安装路径

# 编译
make -j 2
# 安装
make install

# 启动服务
/usr/local/nginx/sbin/nginx

# 添加环境变量
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin

# 查看端口
netstat -antup | grep nginx

#查看服务器类型
curl -I 192.168.137.253:8081

Nginx 安装_第3张图片

Nginx 安装_第4张图片

服务脚本
vim /etc/init.d/nginx
#------------------------------------------服务脚本------------------------------
#!/bin/bash
#description:nginx service control script

PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"

case "$1" in
	start)
		netstat -anplt | grep ":8081" &> /dev/null && pgrep "nginx" &> /dev/null
		if [ $? -eq 0 ];then
			echo "Nginx service already running."
		else
			$PROG -t &> /dev/null
			if [ $? -eq 0 ];then
				$PROG
				echo "Nginx service start success."
			else
				echo "file is error"
				$PROG -t
			fi
		fi
		;;
	stop)
		netstat -anplt | grep ":8081" &> /dev/null && pgrep "nginx" &> /dev/null
		if [ $? -eq 0 ];then
			kill -s QUIT $(cat $PIDF)
			echo "Nginx service stop success."
		else
			echo "Nginx service already stop"
		fi
		;;
	restart)
		$0 stop
		$0 start
		;;
	status)
		netstat -anplt | grep ":8081" &> /dev/null && pgrep "nginx" &> /dev/null
		if [ $? -eq 0 ];then
			echo "Nginx service is running."
		else
			echo "Nginx is stop."
		fi
		;;
	reload)
		netstat -anplt | grep ":8081" &> /dev/null && pgrep "nginx" &> /dev/null
		if [ $? -eq 0 ];then
			$PROG -t &> /dev/null
			if [ $? -eq 0 ]; then
				kill -s HUP $(cat $PIDF)
				echo "reload Nginx config success."
			else
				$PROG -t
			fi
		else
			echo "Nginx service is not run."
		fi
		;;
	*)
		echo "Usage:$0{start|stop|restart|reload}"
		exit 1
esac

#------------------------------------------服务脚本------------------------------
# 给脚本添加可执行权限
chmod +x /etc/init.d/nginx 

# 测试脚本
/etc/init.d/nginx start
/etc/init.d/nginx stop


# 操作失败
#chkconfig --add nginx 			# 把 nginx 添加为系统服务
#chkconfig nginx on 					# 把 nginx 添加开机自启动
#chkconfig --list nginx 			# 查看 nginx 开机启动项
3、Nginx 相关配置
修改Nginx运行账号

编译安装 nginx 时若不指定--user=,--group=选项,默认是 nobody 用户

# 创建 nginx 程序账号
useradd -M -s /sbin/nologin nginx 

# 修改 nginx 运行账号
vim /usr/local/nginx/conf/nginx.conf

Nginx 安装_第5张图片

# 语法检测
nginx -t

# 重载 nginx
nginx -s reload

在这里我们还可以看到在查看的时候,worker 进程是 nginx 用户了,但是 master 进程还是 root,master 是监控进程,也叫主进程,worker 是工作进程。

master 监控进程使用 root 用户,也可以是降级使用普通用户,如果都是用普用户,那么编译安装的时候,是用普通用户执行,sudo 方式操作。

设置Nginx运行进程个数

Nginx 运行进程个数一般我们设置 CPU 的核心或者核心数 x2

# 查看 cpu 个数 -> 2
grep ^processor /proc/cpuinfo | wc -l

# 设置 nginx 中进程数
vim /usr/local/nginx/conf/nginx.conf

# 重载 nginx 配置文件
nginx -s reload

设置Nginx的CPU亲和力

这个要根据你的 CPU 线程数配置,worker_processes 最多开启 8 个,8 个以上性能提升不会再提升了,而且稳定性变得更低,所以 8 个进程够用了。

vim /usr/local/nginx/conf/nginx.conf 

# 2 核 CPU,开启 2 个进程
worker_processes 2; 
worker_cpu_affinity 01 10;
# 4 核 4 线程配置
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
# 8 核 8 线程配置
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 
00010000 00100000 01000000 10000000;
# 4 线程的 CPU 跑两个进程
worker_processes 2;
worker_cpu_affinity 0101 1010;
  • 第一个进程在第一个和第三个 cpu 上运行,第二个和第四个 cpu 上运行,两个进程分别在这两个组合上轮询!
设置nginx最多打开的文件数

当一个 nginx 进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit -n 的值保持一致。

vim /usr/local/nginx/conf/nginx.conf 
worker_rlimit_nofile 102400; 

# 修改系统可以打开的最大文件数
# 临时修改
ulimit -n 
ulimit -n 102400

# 永久修改:修改 linux 的软硬件限制文件/etc/security/limits.conf
* soft nofile 102400 
* hard nofile 102400
4、Nginx 事件处理模型
vim /usr/local/nginx/conf/nginx.conf 

events { 
 use epoll;
 # 单个进程允许客户端最大并发连接数
 worker_connections 65535; 
}

worker_connections 102400; :这个数值一般根据服务器性能和内存来制定,也就是单个进程最大连接数,实际nginx 服务器最大并发值就是 work 进程数乘以这个数。

如何设置,可以根据一个进程启动所占内存,top -u nginx,但是实际我们填入一个 102400,足够了,这些都算并发值,一个网站的并发达到这么大的数量,也算一个大站了!

Nginx 安装_第6张图片

IO 多路复用的机制

nginx 采用 epoll 事件模型,select,poll,epoll 都是 IO 多路复用的机制。I/O 多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。

epoll 优势

① Epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大,具体数目可以 cat /proc/sys/fs/file-max 察看。

② 效率提升,Epoll 最大的优点就在于它只管你“活跃”的连接,而跟连接总数无关,因此在实际的网络环境中,Epoll 的效率就会远远高于 select 和 poll。

③ 内存拷贝,Epoll 在这点上使用了“共享内存”,这个内存拷贝也省略了。

你可能感兴趣的:(Nginx,nginx,服务器)