当前位置: 首页 > news >正文

nginx网站服务

目录

一、编译安装Nginx服务

1.1 关闭防火墙,将安装nginx所需软件包传到/opt目录下

1.2 安装依赖包

1.3 创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

1.4 编译安装Nginx

1.5 检查、启动、重启、停止 nginx服务

1.5.1 新版本升级

1.6 添加Nginx系统服务

二、认识Nginx服务主要配置文件nginx.conf

2.1 全局配置

2.2 I/O 事件配置

2.3 HTTP 配置

2.4 日志格式设定

三、访问状态配置

3.1 访问状态查看

3.1.1 查看支持模块

3.1.2 修改配置文件

3.1.3 重启服务,访问测试

3.2 基于授权的访问控制

3.2.1 生成用户密码认证文件

3.3 基于客户端的访问控制

四、Nginx做虚拟主机使用

4.1 基于域名的Nginx 虚拟主机

4.1.1 为虚拟主机提供域名解析

4.1.2 为虚拟主机准备网页文档

4.1.3 修改Nginx的配置文件

4.1.4 重启服务,访问测试

4.2 基于IP 的 Nginx 虚拟主机

4.3 基于端口的 Nginx 虚拟主机

Nginx 和 Apache 的差异


一、编译安装Nginx服务

1.1 关闭防火墙,将安装nginx所需软件包传到/opt目录下

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

nginx-1.12.0.tar.gz

1.2 安装依赖包

#nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

1.3 创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

useradd -M -s /sbin/nologin nginx

1.4 编译安装Nginx

cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \                            #指定nginx的安装路径
--user=nginx \                                        #指定用户名
--group=nginx \                                        #指定组名
--with-http_stub_status_module                        #启用 http_stub_status_module 模块以支持状态统计

make && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/        #让系统识别nginx的操作命令

1.5 检查、启动、重启、停止 nginx服务

nginx -t                                #检查配置文件是否配置正确


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

                
#停止
cat /usr/local/nginx/logs/nginx.pid        #先查看nginx的PID号
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx


#重载
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx


#日志分割,重新打开日志文件
kill -USR1 <PID号>


#平滑升级
kill -USR2 <PID号>

1.5.1 新版本升级

tar -zxvf nginx-1.xx.xx.tar.gz 


cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
--with-http_ssl_module

make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade  #要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的
#或者先 killall nginx ,再/usr/local/nginx/sbin/nginx

注意:编译完之后不要直接install  要替换nginx文件

1.6 添加Nginx系统服务

方法一:vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)$COM
;;stop)kill -s QUIT $(cat $PID)
;;restart)$0 stop$0 start
;;reload)kill -s HUP $(cat $PID)
;;*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1esac
exit 0chmod +x /etc/init.d/nginx
chkconfig --add nginx							#添加为系统服务
systemctl stop nginx
systemctl start nginx方法二:vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target[Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径[Install]服务安装的相关设置,可设置为多用户chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

 

二、认识Nginx服务主要配置文件nginx.conf

  1. 全局块:全局配置,对全局生效;
  2. events块:配置影响 Nginx 服务器与用户的网络连接;
  3. http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
  4. server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
  5. location块:用于配置匹配的 uri ;
  6. upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。

vim /usr/local/nginx/conf/nginx.conf         #配置文件位置

2.1 全局配置

#user nobody;                     #运行用户,若编译时未指定则默认为 nobody
worker_processes 1;             #工作进程数量,一般设置为和 CPU 核数一样;设置为auto,nginx将会自己获取这个数值
#error_log logs/error.log;         #错误日志文件的位置
#pid logs/nginx.pid;             #PID 文件的位置
worker_rlimit_nofile 65535;        #指定 worker 子进程可以打开的最大文件句柄数,默认为1024

2.2 I/O 事件配置

events {use epoll; 					#使用 epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能worker_connections 65535; 	#每个 worker 子进程能够处理的最大并发连接数multi_accept on;            #告诉nginx收到一个新连接通知后接受尽可能多的连接,默认为off,关闭时一次接收一条连接accept_mutex on;            #默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题
}#如提高每个进程的连接数还需执行“ulimit -HSn 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
#epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
#worker_processes的值和work_connections的值决定了最大并发数量,最大并发数计算方式为:worker_processes*worker_connections。但在反向代理场景中计算方法不同,因为nginx既要维持和客户端的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,所以最大并发数计算方式为:worker_processes*worker_connections/2。

2.3 HTTP 配置

http {
    ##文件扩展名与文件类型映射表
    include       mime.types;
    ##默认文件类型
    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  logs/access.log  main;
    ##开启高效的文件传输模式(启用内核复制模式,大幅提高IO效率)
    sendfile        on;
    ##开启tcp_nopush和tcp_nodelay用于防止网络阻塞
    #必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送。)
    tcp_nopush     on;
    tcp_nodelay    on;
    ##连接保持超时时间,单位是秒
    #keepalive_timeout  0;
    keepalive_timeout  65;
    ##gzip模块设置,设置是否开启gzip压缩输出
    #gzip  on;
    
    ##Web 服务的监听配置
    server {
        ##监听地址及端口
        listen 80; 
        ##站点域名,可以有多个,用空格隔开
        server_name www.xy101.com;
        ##网页的默认字符集
        charset utf-8;
        ##根目录配置
        location / {
            ##网站根目录的位置/usr/local/nginx/html
            root html;
            ##默认首页文件名
            index index.html index.php;
        }
        ##内部错误的反馈页面
        error_page 500 502 503 504 /50x.html;
        ##错误页面配置
        location = /50x.html {
            root html;
        }
    }
}

2.4 日志格式设定

$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

location常见配置指令,root、alias、proxy_pass
root(根路径配置,可以写在 http、server、location 等配置中):root /var/www/html
请求www.xy101.com/test/1.html,会返回文件/var/www/html/test/1.html

alias(别名配置,只能写在 location 中):alias /var/www/html
请求www.xy101.com/test/1.html,会返回文件/var/www/html/1.html

proxy_pass(反向代理配置)

三、访问状态配置

3.1 访问状态查看

3.1.1 查看支持模块

cat /opt/nginx-1.12.0/auto/options | grep YES     #可查看 nginx 已安装的所有模块

3.1.2 修改配置文件

cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
......
http {
......server {listen 80;server_name www.xy101.com;charset utf-8;location / {root html;index index.html index.php;}##添加 stub_status 配置##location /status {                     #访问位置为/statusstub_status on;                 #打开状态统计功能access_log off;                 #关闭此位置的日志记录}}
}

3.1.3 重启服务,访问测试

systemctl restart nginx

浏览器访问 http://192.168.80.10/status
Active connections:表示当前的活动连接数,即当前与 Nginx 服务器建立的连接数。
server accepts handled requests :表示已经处理的连接信息
三个数字依次表示服务器已接收的连接数;服务器成功处理的连接数;服务器累计处理的总请求数(在保持连接模式下,请求数量可能会大于连接数量)
Reading:表示当前正在从客户端读取数据的连接数。
Writing:表示当前正在向客户端写入数据的连接数。
Waiting:表示当前空闲并等待请求的连接数。

可 curl -Ls http://192.168.80.10/status 结合 awk与if 语句进行性能监控。
 

 

3.2 基于授权的访问控制

3.2.1 生成用户密码认证文件

yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zhangsan
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db

3.2.2 修改主配置文件相对应目录,添加认证配置项

vim /usr/local/nginx/conf/nginx.conf
......server {location / {......##添加认证配置##auth_basic "secret";                #设置密码提示框文字信息auth_basic_user_file /usr/local/nginx/passwd.db;}}

3.2.3 重启服务,访问测试

nginx -t


systemctl restart nginx

浏览器访问 http://主机ip

3.3 基于客户端的访问控制

访问控制规则如下:
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。

vim /usr/local/nginx/conf/nginx.conf
......
    server {
        location / {
            ......
            ##添加控制规则##
            allow 192.168.80.200;                     #允许访问的客户端 IP
            deny all;                                #拒绝其它IP客户端访问
        }
    }

systemctl restart nginx
 

四、Nginx做虚拟主机使用

4.1 基于域名的Nginx 虚拟主机

4.1.1 为虚拟主机提供域名解析

echo "192.168.80.10 www.xy101.com www.xy102.com" >> /etc/hosts

4.1.2 为虚拟主机准备网页文档

mkdir -p /var/www/html/xy102
mkdir -p /var/www/html/xy101
echo "<h1>www.xy101.com</h1>" > /var/www/html/xy101/index.html
echo "<h1>www.xy102.com</h1>" > /var/www/html/xy102/index.html

4.1.3 修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
......
http {
......server {listen 80;server_name www.xy101.com;                    #设置域名www.xy101.comcharset utf-8;access_log logs/www.xy101.access.log;         #设置日志名location / {root /var/www/html/xy101;                    #设置www.xy101.com 的工作目录index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}server {listen 80;server_name www.xy102.com;                    #设置域名www.xy102.comcharset utf-8;access_log logs/www.xy102.access.log; location / {root /var/www/html/xy102;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}    
}

4.1.4 重启服务,访问测试

systemctl restart nginx

浏览器访问
http://www.xy101.com
http://www.xy102.com

4.2 基于IP 的 Nginx 虚拟主机

vim /usr/local/nginx/conf/nginx.conf
......
http {
......server {listen 192.168.80.10:80;					#设置监听地址192.168.80.10server_name www.xy101.com;charset utf-8;access_log logs/www.xy101.access.log; location / {root /var/www/html/xy101;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}server {listen 192.168.80.11:80;					#设置监听地址192.168.80.11server_name www.xy102.com;charset utf-8;access_log logs/www.xy102.access.log; location / {root /var/www/html/xy102;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}	
}systemctl restart nginx浏览器访问
http://192.168.80.10
http://192.168.80.11

4.3 基于端口的 Nginx 虚拟主机

vim /usr/local/nginx/conf/nginx.conf
......
http {
......server {listen 192.168.80.10:8080;					#设置监听 8080 端口server_name www.xy101.com;charset utf-8;access_log logs/www.xy101.access.log; location / {root /var/www/html/xy101;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}server {listen 192.168.80.10:8888;					#设置监听 8888 端口server_name www.xy102.com;charset utf-8;access_log logs/www.xy102.access.log; location / {root /var/www/html/xy102;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}	
}systemctl restart nginx浏览器访问
http://192.168.80.11:8080
http://192.168.80.11:8888

Nginx 和 Apache 的差异

轻量级,nginx比apache 占用更少的内存及资源;
静态处理,Nginx 静态处理性能比 Apache 高 ;
Nginx可以实现无缓存的反向代理加速,提高网站运行速度;
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;
Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;
nginx是异步进程,多个连接可以对应一个进程 ;apache是同步多进程,一个连接对应一个进程;
Nginx高度模块化,编写模块相对简单,且组件比Apache少
高并发下nginx 能保持低资源低消耗高性能;
Nginx 配置简洁, Apache配置复杂;


http://www.mrgr.cn/news/33832.html

相关文章:

  • linux-Firewalld使用指南
  • Linux配置的历史命令删除
  • 【3-4个月检索|IEEE出版|往届均已EI检索|悉尼/郑州双会场】2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)
  • ssm083化妆品配方及工艺管理系统的设计与实现+jsp(论文+源码)_kaic
  • 【数学】通用三阶矩阵特征向量的快速求法 超简单!!!
  • 推荐一款功能强大的视频修复软件:Apeaksoft Video Fixer
  • iOS V2签名网站系统源码,开源免授权(含视频教程)
  • GNU编译器(GCC):编译的4个过程及.elf、.list、.map文件功能说明
  • 【Android】BottomSheet基本用法总结(BottomSheetDialog,BottomSheetDialogFragment)
  • 聚簇索引和非聚簇索引的定义和区别
  • Codeforces Round 974 (Div. 3) G. Milky Days
  • 布草洗涤-酒店分楼层统计报表--———未来之窗行业应用跨平台架构
  • 中小企业体系技术抽象沉淀-异地灾备篇
  • Linux:环境变量
  • 【9月22日小雪】A股下周趋势分析
  • 自然语言处理NLP:文本预处理Text Pre-Processing
  • 【Python报错已解决】TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘
  • 浅谈Linux中文件与目录的ACL
  • python函数的一些介绍
  • C++——将数组a[5]={-1,2,9,-5,7}中小于0的元素置成0。并将其结果输出(要求:用数组名作为函数的参数来实现)
  • Python爬虫之urllib模块详解
  • 双向链表:实现、操作与分析【算法 17】
  • 传输层 II(TCP协议——协议的特点、报文段、连接管理)【★★★★】
  • cnn机器学习时python版本不兼容报错
  • tb的数数问题(牛客小白月赛)
  • 算法打卡:第十一章 图论part04