CentOS7 Nginx安装配置操作指引
目录
- Nginx概念 3
- Nginx安装 3 2.1 通过yum安装部署 3
- 构建Nginx仓储库 3
- 建立nginx.repo 文件 4
- 更新系统 4
- 执行安装 4
- 运行并验证 5 2.2 通过编译安装部署 6 2.2.1 依赖包安装 6 2.2.2 下载源码安装包 6 2.2.3 Configure命令参数讲解 7 2.2.4 编译安装 9 2.2.5 运行并验证 9 2.2.6 Nginx加入环境变量 10
- Nginx运行、重启及关闭 11 3.1 Nginx启动 11 3.2 Nginx状态检查 11 3.3 Nginx关闭 11 3.3.1 nginx进程支持的信号 12 3.3.2 快速关闭 12 3.3.3 正常关闭 13 3.3.4 强制关闭 13 3.3.5 关闭工作进程 13 3.4 Nginx重启 14
- Nginx配置 14
- 防火墙配置 20
- 参考文献 21
1.Nginx概念 Nginx是一台轻量级、高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 其主要特点是:占有内存少,并发能力强。 Nginx unit:Nginx 多语言应用程序服务器; Nginx plus:web服务器、内容缓存及API网关 多合一负载均衡器; Nginx control:Nginx plus的几种监控和管理; Nginx waf:web应用程序防火墙; Nginx big:Nginx和Nginx plus的轻量级基于云的监视;
2.Nginx安装 Nginx安装有两种方式,一种是通过yum直接安装,方法二是通过源码编译安装。 通过yum安装方法简单、速度很快,而且该软件包含几乎所有正式的Nginx模块但安装的版本不是最新版本; 编译安装方式更加灵活,可以自定义安装路径以及添加特定的模块,包含第三方模块,或应用最新的安全补丁。
2.1通过yum安装部署 安装前首先检查下系统版本及环境: [root@nginx-1 ~]# cat /etc/centos-release
可以看到我们的安装部署环境为 centos 7.2版本。 1.构建Nginx仓储库 进入网址 https://nginx.org/en/linux_packages.html#RHEL-CentOS ,可以查看到针对各个系统的详细安装步骤:
默认是安装稳定版,如想要安装主线版,可输入如下命令:
开始使用yum安装:
2.建立nginx.repo 文件 在/etc/yum.repos.d/ 目录下新建文件nginx.repo [root@nginx-1 ~]# vim /etc/yum.repos.d/nginx.repo
3.更新系统 [root@nginx-1 ~]# yum update
4.执行安装 [root@nginx-1 ~]# yum install nginx
安装时提示是否接受GPG秘钥,并验证指纹是否匹配 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62,如果是,输入y表示接受。
5.运行并验证 安装好后,可以直接运行并验证是否安装成功。 查看安装后文件,安装配置文件在/etc/nginx/ 目录,执行文件路径:/usr/sbin/nginx ,日志文件在 /var/log/nginx 目录。 [root@nginx-1 nginx-1.16.1]# find / -name nginx
启动nginx服务,并检查端口: [root@nginx-1 ~]# nginx [root@nginx-1 ~]# netstat -nutpl
[root@nginx-1 ~]# curl -I 127.0.0.1
出现以上结果,表示,已安装成功,并运行。版本为1.16.1版。
2.2通过编译安装部署 2.2.1依赖包安装 源码安装之前,首先要安装好相应的依赖包: [root@nginx-1 ~]# yum -y install gcc gcc-c++ autoconf automake libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel 2.2.2下载源码安装包 通过官网下载对应源码安装包文件https://nginx.org/en/download.html,
或在服务器上直接通过命令下载: [root@nginx-1 src]# wget https://nginx.org/download/nginx-1.16.1.tar.gz
下载后解压缩: [root@nginx-1 src]# tar -zxvf nginx-1.16.1.tar.gz
2.2.3Configure命令参数讲解 Configure命令详细参数可参考以下官方文档: http://nginx.org/en/docs/configure.html
2.2.4编译安装
[root@nginx-1 nginx-1.16.1]# ./configure
--prefix=/usr/local/nginx
--error-log-path=/var/log/nginx/error.log
--with-http_ssl_module
[root@nginx-1 nginx-1.16.1]#make && make install 编译安装后,通过tree命令检查安装后文件结构: [root@nginx-1 nginx]# tree /usr/local/nginx/ /usr/local/nginx/ #安装目录 ├── client_body_temp ├── conf #nginx所有配置文件目录 │ ├── fastcgi.conf #fastcgi 配置文件 │ ├── fastcgi.conf.default #fastcgi配置文件的原始备份 │ ├── fastcgi_params #fastcgi参数文件 │ ├── fastcgi_params.default #fastcgi参数文件的原始备份 │ ├── koi-utf │ ├── koi-win │ ├── mime.types #媒体类型文件 │ ├── mime.types.default #媒体类型文件原始备份 │ ├── nginx.conf #nginx主配置文件 │ ├── nginx.conf.default #nginx主配置文件原始备份 │ ├── scgi_params #scgi相关参数文件 │ ├── scgi_params.default │ ├── uwsgi_params #uwsgi相关参数文件 │ ├── uwsgi_params.default │ └── win-utf ├── fastcgi_temp #fastcgi临时数据目录 ├── html #编译安装时nginx默认站点目录 │ ├── 50x.html #错误页面代替显示文件 │ └── index.html #默认首页文件 ├── logs #nginx默认日志目录 │ ├── access.log #nginx默认访问日志文件,可以实 #时记录网址用户访问情况信息 │ ├── error.log #nginx默认错误日志文件 │ └── nginx.pid #nginx的pid文件,nginx启动后, #会把所有进程的ID号写到此文件 ├── proxy_temp #proxy临时目录 ├── sbin #nginx命令文件路径 │ └── nginx #nginx执行文件 ├── scgi_temp #scgi临时目录 └── uwsgi_temp #uwsgi临时目录
2.2.5运行并验证 通过以下命令运行 nginx并检查: [root@nginx-1 local]# /usr/local/nginx/sbin/nginx #运行nginx [root@nginx-1 local]# netstat -nutpl | grep nginx #检查端口
[root@nginx-1 local]# curl -I 127.0.0.1
可以看到nginx已安装成功并正常运行。
2.2.6Nginx加入环境变量 正常安装后无法直接通过命令执行,需要进入nginx执行文件的路径下执行,如:
因此,需要配置环境变量: 编辑 /etc/profile文件,在文件最后面加上以下行: [root@nginx-1 local]# vim /etc/profile export NGINX_HOME=/usr/local/nginx export PATH=$PATH:$NGINX_HOME/sbin
保存后立即生效: [root@nginx-1 local]# source /etc/profile 或 [root@nginx-1 local]# ./etc/profile 再执行命令可以看到:
3.Nginx运行、重启及关闭 3.1Nginx启动 执行以下命令启动nginx: 方法一:如已配置好nginx的环境变量,可以直接执行nginx命令启动 [root@nginx-1 ~]# nginx 方法二:可以通过nginx可执行文件绝对路径执行 [root@nginx-1 ~]# /usr/local/nginx/sbin/nginx 方法三:执行运行指定的配置文件,如配置文件默认,可不指定 [root@nginx-1~]#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
3.2Nginx状态检查 检查nginx端口 [root@nginx-1 ~]# netstat -nutpl | grep nginx
检查进程,此示例中,master表示是主进程,pid号12529,;worker是工作进程。Pid号是12530 [root@nginx-1 ~]# ps -ef | grep nginx
3.3Nginx关闭 Nginx的停止有多种方法,一般通过kill命令并发送不同信号给nginx进程的方式来控制nginx的停止。 如通过指定nginx的PID文件路径关闭: -# kill -信号 “/usr/local/nginx/logs/nginx.pid” 或通过主进程的pid号进行关闭: -# kill -信号 nginx主进程号
3.3.1 nginx进程支持的信号 Nginx主进程支持的信号:
Nginx工作进程支持的信号:
3.3.2 快速关闭 使用以下命令来快速关闭nginx: [root@nginx-1 systemd]# nginx -s stop 或通过给主进程发送 TERM 或 INT信号来快速关闭。 首先通过ps命令查到nginx的主进程及工作进程的pid:
[root@nginx-1 conf]# kill -TERM 12529
3.3.3 正常关闭 可以使用以下命令正常关闭nginx, [root@nginx-1 systemd]# nginx -s quit 或给主进程发送 QUIT来实现正常关闭。 [root@nginx-1 conf]# kill -QUIT 22775
3.3.4 强制关闭 使用kill -9 命令强制关闭nginx。强制关闭主进程后,工作进程任然存在,需要通过kill命令一一关闭。 [root@nginx-1 conf]# kill -9 23606 #关闭主进程 *[root@nginx-1 conf]# kill -9 23607 * #关闭工作进程
3.3.5 关闭工作进程 通过WINCH信号来正常关闭工作进程,或直接使用kill -9 强制关闭。 [root@nginx-1 conf]# kill -WINCH 23949 #正常关闭工作进程 [root@nginx-1 conf]# kill -9 23950 #强制关闭工作进程
3.4 Nginx重启 当配置变更后,需要重新加载。可使用以下命令重启: [root@nginx-1 sbin]# nginx -s reload 或给主进程发送 HUP信号 [root@nginx-1 sbin]# kill -HUP 25064 当nginx接受到HUP信号时,首先解析配置文件,如配置文件配置无问题,就应用新的配置文件;如配置文件有问题,将继续使用旧的配置进行工作。 Nginx应用新的配置文件后,通知旧的工作进程关闭监听套接字,但就得工作进程还会继续为当前连接提供服务,直到旧的工作进程被关闭。 因此,我们变更配置文件后,需要执行以下命令检查配置是否正确: [root@nginx-1 sbin]# nginx -t 或者 [root@nginx-1 sbin]# nginx -t -c /usr/local/nginx/conf/nginx.conf
出现以上结果表示配置无问题。
4.Nginx配置 Nginx.conf配置文件默认是安装在 prefix/conf/nginx.conf 目录下。也可以通过find命令查看。
Nginx.conf详细配置可参考《nginx.conf 配置详解》。 使用vim命令打开文件编辑: [root@nginx-1 ~]# vim /usr/local/nginx/conf/nginx.conf #user nobody; #nginx进程数,建议设置为等于CPU总核心数 worker_processes 1; #全局错误日志定义目录,默认在 /usr/local/nginx/logs/error.log,可自定义其他路径; #全局错误日志定义级别[debug | info | notice | warn | error | crit ] #例如:error_log /var/log/nginx/error.log debug #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid进程文件路径,默认 /usr/local/nginx/logs/nginx.pid,可以自定义其他路径。 #pid logs/nginx.pid; #工作模式与连接数上限 events { #参考时间模型 use [ kqueue | rtsig | epoll | select | poll ]; #epoll 模型是 Linux 2.6以上版本内核中的高性能网络I/O模型, #如果是FreeBSD系统,就使用kqueue模型 use epoll; #单个工作进程最大连接数(最大连接数=连接数*进程数) worker_connections 1024; } #设置HTTP服务器 http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型 #charset utf-8; #设置字符编码 #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 logs/access.log main;
client_header_buffer_size 32k; #上传文件大小限制 large_client_header_buffers 4 64k; #设定请求缓存大小 client_max_body_size 8m; #设定请求缓存大小 ##开启高效文件传输模式, #sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on, #如果用来进行下载等应用磁盘IO重负载应用,可设置为off, #如果图片显示不正常,可把这个改为off sendfile on; #autoindex on; #开启目录列表访问权限,默认关闭 #tcp_nopush on; #防止网络阻塞 #tcp_nodelay on; #方式网络阻塞 #keepalive_timeout 120; #长连接超时时间,单位为秒 keepalive_timeout 65; #FastCGI参数配置 fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #gzip模块设置 gzip on; #开启gzip压缩输出 gzip_min_length 1k; #最小压缩文件大小 gzip_buffers 16k; #压缩缓冲区 #gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0) gzip_comp_level 2; #压缩等级 #压缩类型,默认就已经包含text/html gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #开启限制IP连接数的时候需要使用 #limit_zone crawler $binary_remote_addr 10m; #虚拟主机配置 server { listen 80; #监听端口 server_name localhost; #服务器域名,可以有多域名,用空格隔开 index index.html index.htm index.php #设置访问首页 #charset koi8-r; #日志格式设定 log_format access '$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/ha97access.log access; #php设置 location ~ ..(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } #图片缓存时间设置 location ~ ..(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; } #JS和CSS缓存时间设置 location ~ .*.(js|css)?$ { expires 1h; } location / { root html; index index.html index.htm; }
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# 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;
# }
#}
}
5.防火墙配置 Nginx运行后,需要放通防火墙后才能正常访问。 [root@nginx-1 ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent [root@nginx-1 ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent [root@nginx-1 ~]# firewall-cmd --reload [root@nginx-1 ~]# firewall-cmd --zone=public --list-ports
以上已放通80及443端口,再次测试是否能长成访问:
6.参考文献 https://docs.nginx.com/nginx/admin-guide/ https://nginx.org/en/docs/ 实战Nginx:取代Apache的高性能Web服务器 张宴著
Zabbix5.0企业级分布式监控系统:精讲与企业应用