搞了Apache,怎么可能不搞搞Nginx呢?

Posted 云来云去-起飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搞了Apache,怎么可能不搞搞Nginx呢?相关的知识,希望对你有一定的参考价值。

目录

一、概述

1.1.简介

1.2.优势

1.3.缺点

1.4.应用场景

二、安装配置

2.1.关闭防火墙、安全

2.2.解压并移至/opt文件夹下

2.3.编译初始化nginx

2.4.设置软链接

2.5.添加用户

2.6.启动

三、配置分析

3.1.对nginx.pid的操作

3.2.添加到service中管理

3.3.添加到 systemctl 中管理

3.4.nginx主配置文件解析

3.5.永久修改文件打开最大值

3.6.配置访问统计

3.7.访问控制

3.8.基于客户端的访问限制

3.9.nginx的虚拟机主机

3.9.1.基于域名

3.9.2.基于端口

3.9.3.基于ipf访问

四、总结


一、概述

1.1.简介

     Nginx是一个轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。

1.2.优势

  • 占内存小,可实现高并发连接(3万~5万),处理响应快
  • 可实现http服务器、虚拟主机、方向代理、负载均衡
  • Nginx配置简单
  • 可以不暴露正式的服务器IP地址
  • 稳定性高
  • 系统消耗资源低
  • 节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
  • 接收用户请求是异步的
  • Nginx内置的健康检查功能

1.3.缺点

  •  动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力

1.4.应用场景

  •      http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
  •      虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
  •      反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台  服务器负载高宕机而某台服务器闲置的情况。
  •      nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截

二、安装配置

2.1.关闭防火墙、安全

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
iptables -F

2.2.解压并移至/opt文件夹下

tar xf  nginx-1.15.9.tar.gz  -C /opt

 2.3.编译初始化nginx

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
***********
***********
省略

make && make install

2.4.设置软链接

ln -s /usr/local/nginx/sbin/* /usr/local/bin

 2.5.添加用户

useradd -M -s /sbin/nologin nginx

 2.6.启动

nginx

三、配置分析

3.1.对nginx.pid的操作

#启动nginx后查看进程号
ps -aux | grep nginx
netstat -natp | grep 80
#未启动nginx时查看进程号
cat /usr/local/nginx/logs/nginx.pid
#杀死进程
kill -l <pid>
#退出nginx
kill -s QUIT <pid>
#或者
killall -3 nginx
killall -l QUIT nginx

########################################
########重载方式#############
kill -3 <pid>
kill -s HUP <pid>
killall -l nginx
killall -s HUP <pid> 

3.2.添加到service中管理

vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20							# chkcofig - “-” 表示不启用开机启动管理 (同时 若不加“#”, chkconfig add nginx 会加载不到配置)
# description: Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"				#命令程序文件位置(nginx)
PID="/usr/local/nginx/logs/nginx.pid"			#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 1
esac
exit 0
chmod +x /etc/init.d/nginx
chkconfig --add nginx         #添加为系统服务
systemctl stop nginx
systemctl start nginx

3.3.添加到 systemctl 中管理

vim /usr/lib/systemd/system/nginx.service
[Unit]	
Description=nginx							#描述
After=network.target						#描述服务类别
[Service]
Type=forking								#后台运行类型
PIDFile =/usr/local/nginx/logs/nginx.pid	#PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx		#启动服务
ExecrReload=/bin/kill -s HUP $MAINPID		#根据PID重载配置
ExecrStop=/bin/kill -s QUIT $MAINPID		#根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target					#启动级别

chmod 754 /lib/systemd/system/nginx.service		#设置754权限是一种安全优化
systemctl start nginx.service
systemctl enable nginx.service

3.4.nginx主配置文件解析

worker_processes  1;                					# worker进程的数量
events {                              					# 事件区块开始
    worker_connections  1024;            				# 每个worker进程支持的最大连接数
}                                    					# 事件区块结束
http {                               					# HTTP区块开始
    include       mime.types;            				# Nginx支持的媒体类型库文件
    default_type  application/octet-stream;     		# 默认的媒体类型
    sendfile        on;       							# 开启高效传输模式
    keepalive_timeout  65;       						# 连接超时
    server {            								# 第一个Server区块开始,表示一个独立的虚拟主机站点
        listen       80;      							# 提供服务的端口,默认80
        server_name  localhost;       					# 提供服务的域名主机名
        location / {            						# 第一个location区块开始
            root   html;       						# 站点的根目录,相当于Nginx的安装目录
            index  index.html index.htm;      			# 默认的首页文件,多个用空格分开
        }          										# 第一个location区块结果
        error_page   500502503504  /50x.html;     		# 出现对应的http状态码时,使用50x.html回应客户
        location = /50x.html {          				# location区块开始,访问50x.html
            root   html;      							# 指定对应的站点目录为html
        }
    }  

注:此处worker_connections  1024; 每个worker进程支持的最大连接数 和系统的文件打开数有一定关系,所以在优化的时候,需要通过ulimit -a查看文件打开数,如图

可以通过ulimit -n 65535 临时修改为最大文件打开值,那么如何永久修改呢,请看小节:3.5.永久修改文件打开最大值

3.5.永久修改文件打开最大值

#要想ulimits 的数值永久生效,必须修改配置文件/etc/security/limits.conf 
#在该配置文件中添加
* soft nofile 65535   
* hard nofile 65535  
echo "* soft nofile 65535"  >> /etc/security/limits.conf
echo "* hard nofile 65535"  >> /etc/security/limits.conf
* 表示所用的用户

3.6.配置访问统计

     通过/usr/local/nginx/sbin/nginx -V 查看HTTP_STUB_STATUS的模块是否存在,如果不存在,请重新./configure

#修改nginx.conf主配置文件
#在server中,新增一个location,添加方式如下:
location  /status {
   stub_status on; #开启统计功能
   access_log off; #关闭日志记录
}

 访问方式:http://192.168.1.20/status

    其中三个数字表示:已经处理的连接数 、成功的TCP握手次数、已经处理的请求数

3.7.访问控制

  • 使用httpd-tools 工具进行对目录或者链接进行身份认证
  • -c:创建密码文件
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd. db zhangsan
#添加nginx管理、给与400权限
chown nginx /usr/ local/nginx/passwd.dbchmod 400 /usr/local/nginx/passwd.db

#修改主配置文件相对应目录,添加认证配置项vim /usr/local/nginx/conf/nginx.conf
location /status {
   auth_basic "secret";
   auth_basic_user_file /user/local/nginx/passwd.db
   ******
************
   省略

}

3.8.基于客户端的访问限制

#修改主配置文件相对应目录,添加认证配置项vim /usr/local/nginx/conf/nginx.conf
location / {
    root  html;
    index  index.html index.htm;
    deny 192.168.1.20; #限制192.168.1.20 访问
    allow all; #放通其他来源的访问
}

3.9.nginx的虚拟机主机

3.9.1.基于域名

  • 步骤1:修改/etc/hosts文件
echo "192.168.1.17 www.accp.com www.betnet" >> /etc/hosts
  • 步骤2:创建相对应用的index.html文件
mkdir  -p /var/www/html/accp
mkdir  -p /var/www/html/benet
echo "<h1>www.accp.com</h1>" >> /var/www/html/accp/index.html
echo "<h1>www.benet.com</h1>" >> /var/www/html/benet/index.html
  • 步骤3:修改主配置文件nginx.conf
 server {            						# 第一个Server区块开始,表示一个独立的虚拟主机站点
        listen       192.168.1.17:80;      	# 提供服务的端口,默认80
        server_name  www.accp.com;       		# 提供服务的域名主机名
        charset utf-8;
        access_log logs/accp.access.log;      
        location / {            				# 第一个location区块开始
            root   /var/www/html/accp;       	# 站点的根目录,相当于Nginx的安装目录
            index  index.html index.htm;      	# 默认的首页文件,多个用空格分开
        }          								# 第一个location区块结果

 server {            						
        listen       192.168.1.17:80;      	
        server_name  www.benet.com;
        charset utf-8;
        access_log logs/accp.access.log;              		
        location / {            				
            root   /var/www/html/benet;       	
            index  index.html index.htm;      
        }          								

3.9.2.基于端口

  • 修改主配置文件
 server {            						
        listen       192.168.1.17:80;      	
        server_name  www.accp.com;
        charset utf-8;
        access_log logs/accp.access.log;       		
        location / {            				
            root   /var/www/html/accp;       
            index  index.html index.htm;     
        }          								

 server {            						
        listen       192.168.1.17:8080;      	
        server_name  www.benet.com;
        charset utf-8;
        access_log logs/accp.access.log;             		
        location / {            				
            root   /var/www/html/benet;       	
            index  index.html index.htm;      
        }         

3.9.3.基于ipf访问

  • 步骤1:修改/etc/hosts
vim /etc/hosts
192.168.1.17 www.accp.com
192.168.1.100 www.benet.com
  • 步骤2:设置ip地址
ifconfig en33:0 192.168.1.100 netmask 255.255.255.0
  • 步骤3:修改主配置文件
 server {            						
        listen       192.168.1.17:80;      	
        server_name  www.accp.com;
        charset utf-8;
        access_log logs/accp.access.log;             		
        location / {            				
            root   /var/www/html/accp;       
            index  index.html index.htm;     
        }          								

 server {            						
        listen       192.168.1.100:80;      	
        server_name  www.benet.com;  
        charset utf-8;
        access_log logs/accp.access.log;           		
        location / {            				
            root   /var/www/html/benet;       	
            index  index.html index.htm;      
        }          		

四、总结

       在整个部署,配置过程,大家可以清晰看出,Nginx作为静态访问强大的服务,其配置也是相对比较复杂的,但好在清晰,而Apache的配置相对来说就较为简单,使用与不使用都有总的主配置文件进行控制。当然Nginx在配置的灵活性上要高的多,毕竟可以在server中对各个页面进行做访问控制和功能模块添加。 

以上是关于搞了Apache,怎么可能不搞搞Nginx呢?的主要内容,如果未能解决你的问题,请参考以下文章

阿西吧 最近什么都学

nginx

Fastdfs与nginx进行压缩图片比率随记

nginx module 开发谈

Nginx + CGI/FastCGI + C/Cpp(编不过去,不搞了。。。)(Common Gateway Interface)

Nginx基本使用方法