精华内容
下载资源
问答
  • linux nginx搭建web服务器
    千次阅读
    2020-12-03 23:35:25

    前言

    在之前,已经对 nginx 有过基本的介绍。
    现在尝试利用 nginx 来 搭建一个 web服务器。

    正文

    1.什么是 Web 服务器?

    Web服务器也称为WWW (WORLD WIDE WEB)服务器、HTTP服务器,其主要功能是提供网上信息浏览服务。
    Unix和Linux平台下的常用Web服务器有Apache,Nginx,Lighttpd,Tomcat,IBM WebSphere、BEA Weblogic等,其中应用最广泛的是Apache。而WindowsNT/2000/2003平台下最常用的服务器则是微软公司的IIS C Internet Information Server )

    2.常见的Web服务器简介

    2.1 Apache服务器

    Apache仍然是世界上用得最多的Web服务器,市场占有率达60%左右。它源于NCSAhttpd服务器,在NCSA WWW服务器项目停止后,那些使用NCSA WWW服务器的人们开始交换用于此服务器的补丁,这也是Apache名称的由来(pache补丁)。世界上很多著名的网站都是Apache的用户,它的优势主要在于源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix, Windows. Linux系统平台上),以及其可移植性等。Apache的模块支持非常丰富,虽在速度、性能上不及其他轻量级W eb服务器,但是属于重量级产品,所消耗的内存也比其他Web服务器要高。
    官方网站:http://httpd.apache.org/

    2.2 Nginx服务器

    Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

    Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,是目前市面上唯一能和kangleweb server比拼的web server,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。

    官方网站:http://nginx.org/

    2.3 Tomcat服务器

    Tomcat是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的W eb应用软件容器。Tomcat Server是根据servlet和JSP规范执行的,因此也可以说Tomcat Server实行了Apache-Jakarta规范,且比绝大多数商业应用软件服务器要好。但是,Tomcat对静态文件、高并发的处理比较弱。
    官方网站:http://tomcat.apache.org

    2.4 Lighttpd服务器

    Lighttpd是由一个德国人写的开源软件,其目标是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的Web Server环境。它具有内存开销低、CPU占用率低、效能好,以及模块丰富等特点。支持FastCGI、CGI. Auth、输出压缩(output compress )、URL重写及Alias等重要功能。Lighttpd跟Nginx一样,也是一款轻量级Web服务器,是Nginx的竞争对手之一。

    官方网站:http://www.lighttpd.net/

    2.5 Microsoft IIS 服务器

    Microsoft的W eb服务器产品为Internet Information Server C IIS ) . IIS是允许在公共Intranet或Internet上发布信息的Web服务器。它是目前最流行的Web服务器产品,很多著名的网站都是建立在IIS平台上的。IIS提供了一个图形界面的管理工具,称为Internet服务管理器,可用于监视配置和控制Internet服务。

    IIS是一种Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。它提供ISAPI ( Intranet Server API)作为扩展Web服务器功能的编程接口;同时,它还提供一个Internet数据库连接器,可以实现对数据库的查询和更新。

    IIS只能运行在Microsoft Windows平台、LinuxNnix平台上,因此须要购买商业的Windows Server操作系统。

    演示网站:http://www.yangyufei.com

    总结

    处理静态资源的服务:

    • apache软件
    • nginx软件

    处理动态资源服务:

    • tomcat
    • php

    3.nginx 搭建 Web服务器

    nginx 在近几年大火,甚至有超过 apache的势头。作为开发者的我们,也理应学习。
    为什么要使用 nginx 搭建Web服务器?

    nginx 有许多有点

    1. 支持高并发,消耗内存资源少
    2. 具有多种功能
    • 网站web服务功能
    • 网站负载均衡功能
    • 网站缓存服务
    1. 在多种系统平台都可以进行部署
    2. nginx实现网络通讯时使用的时异步网络IO模型

    使用 yum 安装 nginx

    3.1 nginx 搭建静态 Web 服务器

    先了解一下 nginx 的主配置文件:/etc/nginx/nginx.conf

    user  www;               	 --- 定义worker进程管理的用户(建议不要使用默认的,自己创建一个用户来管理)
    补充: nginx的进程
    master process:  主进程		---管理服务是否能够正常运行   boss
    worker process:  工作进程	---处理用户的访问请求         员工  
    worker_processes  2;        ---定义有几个worker进程  == CPU核数 / 核数的2倍
    error_log  /var/log/nginx/error.log warn;   --- 定义错误日志路径信息
    pid        /var/run/nginx.pid;              --- 定义pid文件路径信息
    	
    第二个部分: 配置文件事件区域
    events {                    
    	worker_connections  1024;   --- 一个worker进程可以同时接收1024访问请求
    }
    
    第三个部分: 配置http区域
    http {
    	include       /etc/nginx/mime.types;      --- 加载一个配置文件(加载 nginx 支持的mime类型)
        default_type  application/octet-stream;   --- 指定默认识别文件类型
        log_format  oldboy  '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_forwarded_for"';                 	
      #  	$remote_addr   			显示用户访问源IP地址信息
      #  	$remote_user            显示认证的用户名信息
      #		[$time_local]           显示访问网站时间
      #		"$request"              请求报文的请求行信息
      #  	$status                 用户访问网站状态码信息
      #		$body_bytes_sent        显示响应的数据尺寸信息
      #		$http_referer           记录调用网站资源的连接地址信息(防止用户盗链)                    
      #		$http_user_agent        记录用户使用什么客户端软件进行访问页面的  (谷歌 火狐 IE 安卓 iphone)
      #		$http_x_forwarded_for   ??? 负载均衡
    		                  --- 定义日志的格式		
        access_log  /var/log/nginx/access.log  oldboy;
    		                  --- 指定日志路径          
        sendfile        on;   ???
        #tcp_nopush     on;   ???
        keepalive_timeout  65;   --- 超时时间
        #gzip  on;
        include /etc/nginx/conf.d/*.conf;        --- 加载虚拟主机配置文件,该目录下所有的文件内部会追加到该位置
    }
    

    再了解一下在主配置文件中加载的 虚拟主机配置文件
    /etc/nginx/nginx.d/default — 扩展配置(虚拟主机配置文件)

    server {
    	listen       8080;                --- 指定监听的端口
    	server_name  www.oldboy.com;      --- 指定网站域名                     
    	root   /usr/share/nginx/html;     --- 定义站点目录的位置
    	index  index.html index.htm;      --- 定义首页文件
    	error_page   500 502 503 504  /50x.html;   --- 优雅显示页面信息
    	location = /50x.html {
    			root   /usr/share/nginx/html;
    	}
    }
    
    1.编写虚拟主机配置文件
    cd /etc/nginx/conf.d/
    vim www.conf
    server {
    	listen        80;  # 设置监听端口号
    	server_name   www.oldboy.com; # 设置虚拟主机名
    	location  /oldboy {
             root  /usr/share/nginx/html;  # 定义站点目录的位置
    		index oldboy.html;				# 定义首页文件
    	}
    }
    
    2.需要获取开发人员编写的网站代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        测试nginx
    </body>
    </html>
    ~            
    

    将代码文件放置放置站点目录下。

    [root@web01 /usr/share/nginx]# tree /usr/share/nginx/html/
    /usr/share/nginx/html/
    └── oldboy.html
    
    3.重启nginx服务(平滑重启)
    systemctl reload nginx 
    nginx -s reload
    
    nginx命令参数
    -t            : test configuration and exit
    	                检查测试配置文件语法
    -s            : send signal to a master process: stop, quit, reopen, reload
    	                控制服务停止或者重新启动
    
    4.编写DNS配置信息

    真实域名: 在阿里云上进行DNS解析记录配置
    模拟域名: 在windows主机的hosts文件中进行配置即可
    C:\Windows\System32\drivers\etc\hosts

    # 虚拟主机外网网卡 nginx配置的虚拟主机名
    10.0.0.7 www.oldboy.com
    
    5.进行测试访问

    浏览器中: http://www.oldboy.com

    在这里插入图片描述
    出现 404 错误,代表资源未找到,那么我们来分析一下,哪里出了问题.

    在这里插入图片描述

    如何改正错误呢?

    1. 修改虚拟主机配置文件
    vim /etc/nginx/conf.d/www.conf
    server {
    	listen        80;  # 设置监听端口号
    	server_name   www.oldboy.com; # 设置虚拟主机名
    	location  /{					# 去掉 oldboy
             root  /usr/share/nginx/html;  # 定义站点目录的位置
    		index oldboy.html;				# 定义首页文件
    	}
    }
    
    平滑重启nginx
    systemctl reload nginx
    

    在这里插入图片描述

    1. 将 oldboy.html 放置到 /usr/share/nginx/html/oldboy目录下
    [root@web01 /usr/share/nginx]# cd /usr/share/nginx/html/
    [root@web01 /usr/share/nginx/html]# mkdir oldboy
    [root@web01 /usr/share/nginx/html]# mv oldboy.html ./oldboy
    

    在 浏览器中 这样访问:http://www.oldboy.com/oldboy

    在这里插入图片描述总结:因为我们location中 设置的是 /oldboy,所以是会去 /usr/share/nginx/html/oldboy 目录下查找 默认配置文件oldboy.html的
    ** PS: 服务配置文件中涉及到地址修改,必须重启nginx服务,不能平滑重启**

    扩展:

    1. 根据用户访问的地址进行控制
      10.0.0.0/24 www.oldboy.com/oldboy 不能访问
      172.16.1.0/24 www.oldboy.com/oldboy 可以访问

    nginx访问模块: ngx_http_access_module

    vim www.conf 
    server {
    	listen        80;
    	server_name   www.oldboy.com;
    	location / {
    		root  /usr/share/nginx/html;
    		index oldboy.html;
    	}
    	location /oldboy {
    		deny  10.0.0.0/24;
    		allow 172.16.1.0/24;
    		root  /usr/share/nginx/html;
    		index oldboy.html;
    	}
    }
    

    补充:
    location外面的信息, 全局配置信息
    location里面的信息, 局部配置信息

    1. 根据用户访问进行认证
      nginx认证模块: ngx_http_auth_basic_module
      第一步:编写虚拟主机配置文件
    server {
    	listen        80;
    	server_name   www.oldboy.com;
    	location / {
    		root   /usr/share/nginx/html;
    		index index.html;
    		auth_basic      "oldboy";
    		auth_basic_user_file password/htpasswd; # 密码文件,建议使用相对路径
    }	
    

    第二步:创建密码文件(文件中密码信息必须是密文的)
    htpasswd 创建一个有密文信息的密码文件

    [root@web01 conf.d]# rpm -qf `which htpasswd` 
    httpd-tools-2.4.6-89.el7.centos.x86_64
    [root@web01 conf.d]# yum -y install httpd-tools  
    htpasswd命令参数说明:
     	  -c  Create a new file.  *****
    	      创建一个密码文件
          -n  Don't update file; display results on stdout.
    	      不会更新文件; 显示文件内容信息
          -b  Use the password from the command line rather than prompting for it. *****
    	      免交互方式输入用户密码信息
          -i  Read password from stdin without verification (for script usage).
    	      读取密码采用标准输入方式,并不做检查 ???
          -m  Force MD5 encryption of the password (default).
    	      md5的加密算法
          -B  Force bcrypt encryption of the password (very secure).
    	      使用bcrypt对密码进行加密  
          -C  Set the computing time used for the bcrypt algorithm
              (higher is more secure but slower, default: 5, valid: 4 to 31).
    		  使用bcrypt algorithm对密码进行加密
          -d  Force CRYPT encryption of the password (8 chars max, insecure).
    	      密码加密方式
          -s  Force SHA encryption of the password (insecure).
    	      加密方式
          -p  Do not encrypt the password (plaintext, insecure).
    	      不进行加密
          -D  Delete the specified user.
    	      删除指定用户
          -v  Verify password for the specified user.
    
    touch .htpasswd
    htpasswd -c password/.htpasswd ren5(用户名) 
    
    cat .passwd
    ren5:$apr1$Lna.yg7m$n6g9180iZQP7GXJ447CE0/
    

    第三步:修改密码文件权限,重启 nginx 服务

    chmod 600 ./htpasswd 
    
    systemctl restart nginx
    
    1. 利用nginx服务搭建网站文件共享服务器

    第一步:编写配置文件(www.conf)
    nginx模块功能: ngx_http_autoindex_module

    server {
    	listen        80;
    	server_name   www.oldboy.com;
    	location /oldboy {
    		root   /usr/share/nginx/html;
    		#index oldboy.html; 需要注释这个
    		autoindex on;    --- 开启nginx站点目录索引功能
    		charset utf-8;   --- 修改目录结构中出现的中文乱码问题
        }
    

    在这里插入图片描述

    1. 错误页面优雅显示
    location /oldboy {
    	root  /usr/share/nginx/html;
    	-- 设置error_page ,出现404 错误 显示oldboy.jpg。oldboy.jpg,要在oldboy目录下
    	error_page  404  oldboy.jpg;
    }
    location /oldgirl {
    	root  /usr/share/nginx/html;
    	error_page  404  oldgirl.jpg;
    }
    

    还有更多的功能和模块使用,在这里就不再介绍了。

    3.2 nginx + PHP

    1.什么是LNMP?

    LNMP其实是一系列服务的简称:

    • LAMP 的全称是 Linux + Apache + MySQL + PHP
    • LNMP 的全称是 Linux + Nginx + MySQL + PHP
    • LNAMP 的全称是 Linux + Nginx + Apache + MySQL + PHP
    1. Linux 是类 Unix 计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo 等。
    2. Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
    3. Apache 是世界使用排名第一的Web服务器软件。 它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
    4. PHP 是一种在服务器端执行的嵌入 HTML 文档的脚本语言。
    5. MySQL 是一个小型关系型数据库管理系统。

    **1.部署mariadb(可以理解为mysql的孪生兄弟) **

    # 1.yum 安装 mariadb
    yum install mariadb-server mariadb -y
    
    # 2.设置开机自启
    systemctl start mariadb.service 
    systemctl enable mariadb.service
    
    # 3.给mysql数据库服务设置密码
    mysqladmin -u root  password 'oldboy123'
    
    # 4.登录
    mysql -u root -poldboy123
    

    2.部署PHP服务

    # 1.更新yum源/卸载系统自带的PHP软件
    yum remove php-mysql php php-fpm php-common
    rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
    
    # 2.安装php软件
    yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded  php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache  php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
    
    # 3.编写配置文件
    vim /etc/php-fpm.d/www.conf
    user = www   -- PS: 保证nginx进程的管理用户和php服务进程的管理用户保持一致
    group = www
    
    # 4.启动php服务
    systemctl start php-fpm 
    systemctl enable php-fpm 
    

    LNMP架构的原理:
    用户访问网站—>nginx(fastcgi_pass) --FastCGI–>(php-fpm – wrapper) php (php解析器) —> mysql(读取或写入)

    利用 FastCGI,将 nginx 请求转发给 php服务 处理。

    3.实现LNMP之间建立关系

    实现nginx + php 建立关系:

    1.编写nginx文件
    vim /etc/nginc/con.d/www.conf
    location ~ \.php$ {
    	root  /usr/share/nginx/html;
    	fastcgi_index index.php;          url               uri
    	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    	fastcgi_pass  127.0.0.1:9000; -- php 服务监听 9000端口
    	include fastcgi_params;   -- 变量配置文件
    }
    
    2.重启nginx 服务
    systemctl restart nginx
    
    3.编写动态资源文件
    [root@web01 conf.d]# cat /usr/share/nginx/html/test_php.php
    <?php
    	phpinfo();
    ?>
    
    4.进行访问测试
    www.oldboy.com/test_php.php
    

    在这里插入图片描述
    **实现php + mysql 建立关系 **

    1.编写php代码文件
    [root@web01 blog]# vim test_mysql.php
    <?php
    	$servername = "localhost";
    	$username = "root";
    	$password = "oldboy123";
    	//$link_id=mysql_connect('主机名','用户','密码');
    	//mysql -u用户 -p密码 -h 主机
    	$conn = mysqli_connect($servername, $username, $password);
    	if ($conn) {
    		echo "mysql successful by root !\n";
    	}else{
    		die("Connection failed: " . mysqli_connect_error());
    	}
    ?>
    
    然后访问www.oldboy.com/test_php.php,
    出现 mysql successful by root ! 
    表示成功!
    
    更多相关内容
  • 纯手工搭建Linux Nginx MySQL PHP WEB服务器
  • 高性能轻量级WEB服务器NGINX 1 内容概述 NginxNginx是一个高性能的HTTP和反向代理服务器。 是一款轻量级的web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器 单台物理服务器可支持30 000~50 000个...

    目录

    Nginx概述

    Linux的I/O

    同步与异步

    阻塞与非阻塞

    常用状态码的含义

    yum 安装 配置 nginx

     编译安装

    访问状态统计配置:

    基于授权密码的访问控制:

    基于客户端的访问控制

    基于域名的nginx 虚拟主机

    基于IP地址

    基于端口


    Nginx概述

    Nginx

    Nginx是一个高性能的HTTP和反向代理服务器。

    是一款轻量级的web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器

    单台物理服务器可支持30000~50000个并发请求。

    Apache

    Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。

    1、优缺点比较:

    (1)nginx相对于apache的优点:

    • 轻量级,同样是web服务,比apache占用更少的内存及资源

    • 抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的高并发下,nginx能保持低资源低消耗高性能

    • 高度模块化的设计,编写模块相对简单

    (2)apache相对于nginx的优点:

    • Rewrite比nginx的rewrite强大 ###rewrite的主要功能就是实现统一资源定位符(URL)的跳转

    • 模块多,基本想到的都可以找到

    • 少bug,nginx的bug相对较多

    • 超稳定

    存在的理由:一般来说,需要性能的web服务,用nginx。若不需要性能只求稳定,就选用apache。

    2、作为web服务器:

    相比apache,nginx使用更少的资源,支持更多的并发连接,体现更高的效率。

    • Nginx作为负载均衡服务器:nginx既可以在内部直接支持rails和php程序对外进行服务,也可以支持http代理服务器对外进行服务。

    • Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比较好。

    • 作为邮件代理服务器:最早开发这个产品的目的之一也是作为邮件代理服务器。

    3、nginx配置简洁, apache较复杂

    4、最核心的区别在于:

    • apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。

    • Nginx处理静态文件好,耗费内存少,只适合静态和反向。

    • Apache在处理动态有优势,

    • nginx并发性比较好,CPU占用内存低,如果rewrite频繁,选用apache最佳。

    • 总的来说,apache依然是大部分公司的首选。

    Linux的I/O

    I/O在计算机中指Input/Output,lOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的IO请求数量为单位,I/O请求通常为读或写数据操作请求。

    一次完整的I/O是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而是需要经历一次从内核空间中的内存数据copy到用户空间的进程内存当中,所以简单说I/O就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。

    • 磁盘I/O:buff/cache 的区别

    • 网络I/O:一切皆文件,本质为对socket文件的读写

     网络I/O

    获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3)
    构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4)
    返回数据,服务器将已构建好的响应再通过内核空间的网络I/0发还给客户端(5-7)

    同步与异步

    同步/异步:关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。

    • 同步: synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成

    • 异步: asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态

    阻塞与非阻塞

    阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态

    • 阻塞: blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。

    • 非阻塞: nonblocking,指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。

     

     阻塞型

     

    非阻塞型同步  

     

     多路复用I/O模型 ( epoll poll select)

    poll是Linu中的字符设备驱动中的一个函数。Linux 2.5.44版本后,poll被epoll取代。和select实现的功能差不多,poll的作用是把当前的文件指针挂到等待队列。

     信号驱动模型

     异步非阻塞I/O模型

    常用状态码的含义

     

    yum 安装 配置 nginx

    关闭防火墙与selinux

    systemctl stop firewal1d.service
    setenforce 0

     

    添加 nginx 到 yum 源中

    sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

    安装 nginx (在吧nginx添加到 yum 源之后,就可以使用 yum 安装了)

    sudo yum install -y nginx

    启动 nginx

    sudo systemctl start nginx.service

     编译安装

    关闭防火墙与selinux

    systemctl stop firewal1d.service
    setenforce 0

     上传安装包 

    nginx 链接:https://pan.baidu.com/doc/share/gK0eB3c_PgMKcgz9DAjQfA-857115113093369 提取码:eiqs

    安装依赖关系包

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

    新建用户 和组便于管理(nginx 服务程序默认 以 nobody 身份运行,建议为其创建专门的用户账户,以便更准确的控制访问权限)

    useradd -M -s /sbin/nologin nginx

    编译安装Nginx

    cd /opt
    tar zxvf nginx-1.120.tar.gz -C /opt
    cd nginx-1.120  
    ./configure \
    --prefix=/usr/local/nginx \
    #安装路径
    --user=nginx \
    #指定用户名
    --group=nginx \
    #指定用户组
    --with-http_stub_status_module
    #启用此模块支持状态统计

    make && make install
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    
    nginx -t
    
    #检查语法
    
    ngnix
    #启动
    
    
    [root@localhost sbin]#cat/usr/local/nginx/logs/nginx.pid 
    12388

     杀掉进程

    kill -3 PID号
    make
    mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
    cp objs/nginx /usr/local/nginx/sbin/nginx
    make upgrade
    #或者先killall nginx ,再 /usr/local/nginx/sbin/nginx

     添加 Nginx 系统服务

     vim /etc/init

    #!/bin/bash
    #chkconfig: 35 99 20
    #description:Nginx Service Control Script
    cmd="/usr/local/nginx/sbin/nginx"
    pid="/usr/local/nginx/logs/nginx.pid"
    
    case $1 in
    
    start)
    $cmd
    ;;
    
    stop)
    kill -3 `cat $pid`
    ;;
    
    reload)
    kill -1 `cat $pid`
    ;;
    
    restart)
    $0 stop
    $0 start
    ;;
    
    *)
    echo "plaese input start,stop,reload,restart"
    exit 1
    
    esac
    exit 0
    
    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=/usr/bin/kill -s HUP $MAINPID
    ExecStop=/usr/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    ##配置参数解释##
    [Unit]
    Description=nginx                     ####描述
    After=network.target                 ####描述服务类别
    [Service]
    Type=forking                                             ###后台运行形式
    PIDFile=/usr/local/nginx/logs/nginx.pid                   ###PID文件位置
    ExecStart=/usr/local/nginx/sbin/nginx                     ###启动服务
    ExecReload=/usr/bin/kill -s HUP $MAINPID             ###根据PID重载配置
    ExecStop=/usr/bin/kill -s QUIT $MAINPID                ###根据PID终止进程
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    
    
    [root@localhost system]#systemctl daemon-reloadsystemctl daemon-reload 
    #重载服务
    [root@localhost system]#systemctl start nginx.service 
    测试

     然后输入自己的ip地址就行了

    访问状态统计配置:

    修改nginx.conf 配置文件,指定访问位置并添加 stub_status配置。

    [root@localhost conf]#vim nginx.conf
    location /status {
                stub_status on;
                access_log off;
            }
    

    基于授权密码的访问控制:

    #安装工具包
    [root@localhost conf]#yum install -y httpd-tools.x86_64 
    [root@localhost conf]#htpasswd -c /usr/local/nginx/passwd.db zz
    New password: 
    Re-type new password: 
    Adding password for user ww
    [root@localhost conf]#htpasswd /usr/local/nginx/passwd.db ww
    New password: 
    Re-type new password: 
    Adding password for user zz
    [root@localhost conf]#cat /usr/local/nginx/passwd.db 
    zz:$apr1$E9CBn4bA$99TtA9W.GwBUloxiqHbWK1
    ww:$apr1$dMfNWk1D$2fUtRx6AgtSweZ6YF1VeC1
    
    #修改配置文件
    [root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf
    location / {
                root html;
                index index.html index.htm;
                auth_basic "secret";
                auth_basic_user_file /usr/local/nginx/passwd.db;
            }
    #查看语法是否错误
    [root@localhost conf]#nginx -t
    #重启 Nginx服务
    [root@localhost conf]#systemctl restart nginx.service 
    #设置文件属主和权限
    [root@localhost conf]#chown nginx /usr/local/nginx/passwd.db 
    [root@localhost conf]#chmod 400 /usr/local/nginx/passwd.db 

    基于客户端的访问控制

    基于客户端的访问控制简介 基于客户端的访问控制是通过客户端 IP 地址,决定是否允许对页面访问。Nginx 基于 客户端的访问控制要比 Apache 简单,规则如下:

    1)deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。

    2)allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。

    3)规则从上往下执行,如匹配则停止,不再往下匹配。

    [root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf
      location / {
                #auth_basic "secret";
                #auth_basic_user_file /usr/local/nginx/passwd.db;
                deny 192.168.91.100;                      ###客户端IP
                allow all;
                root   html;
                index  index.html index.htm;
            }

    基于域名的nginx 虚拟主机

    利用虚拟主机,不用为每个要运行的网站提供一台单独的 Nginx 服务器或单独运行一 组 Nginx 进程,虚拟主机提供了在同一台服务器,同一组 Nginx 进程上运行多个网站的功 能。跟 Apache 一样,Nginx 也可以配置多种类型的虚拟主机,分别是基于 IP 的虚拟主机、 基于域名的虚拟主机、基于端口的虚拟主机。 使用 Nginx 搭建虚拟主机服务器时,每个虚拟 Web 站点拥有独立的“server{}”配置段, 各自监听的 IP 地址、端口号可以单独指定,当然网站名称也是不同的。

    [root@localhost var]#mkdir -p www/html/{kgc,accp}
    [root@localhost html]#echo "this is kgc web" > kgc/index.html
    [root@localhost html]#echo "this is accp web" > accp/index.html
    [root@localhost html]#cat kgc/index.html 
    this is kgc web
    [root@localhost html]#cat accp/index.html 
    this is accp web
    
    [root@localhost html]#vim /usr/local/nginx/conf/nginx.conf
    server {
            listen       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;
            }
    
    
            #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;
            }
    }
    
    server {
            listen       80;
            server_name  www.kgc.com;
    
            charset utf-8;
    
            access_log  logs/kgc.access.log;
    
            location / {
                root /var/www/html/kgc;
                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;
            }

    基于IP地址

    [root@localhost html]#vim /usr/local/nginx/conf/nginx.conf
    server {
            listen   192.168.241.134:80;
            server_name  www.kgc.com;
            
            
    server {
            listen   192.168.241.100:80;
            server_name  www.kgc.com;

    基于端口

    [root@localhost html]#vim /usr/local/nginx/conf/nginx.conf
    server {
            listen   192.168.241.134:80;
            server_name  www.kgc.com;
            
            
    server {
            listen   192.168.241.134:60;
            server_name  www.kgc.com;

    展开全文
  • 搭建文件服务器 1、安装 vsftpd yum -y install vsftpd 2、给文件服务器添加一个用户 useradd ftpuser passwd ftpuser123 3、设置开机自启动 chkconfig vsftpd on vsftpd常用操作命令 启动 systemctl start ...
  • 使用从 Alpine Linux 上的源代码构建nginx 的微型 Web 服务器。 apk 中可用的当前 Nginx 版本是 1.6.2: / # apk --update search nginx nginx-1.6.2-r1 此映像从源构建最新版本 (1.7.11): docker run -it ...
  • 转自http://www.kongzid.com/archives/linuxweb3,要部署普通的java web项目,需要在linux搭建web服务器运行环境,包括JDK、tomcat、mysql、redis、nginx等,本文主要介绍nginx的下载安装配置,linux系统采用的...

    转自:Linux下JAVA WEB服务器的搭建三(REDIS集群),更好浏览体验:http://www.kongzid.com/

    目录

    1、nginx介绍

    2、nginx的下载

    3、nginx的安装

    3.0 nginx的卸载

    3.1 基于APT源安装

    3.2 编译源码安装

    3.2.1 安装依赖包

    3.2.2 解压nginx tar包

    3.2.3 nginx文件夹改名并进入到该目录

    3.2.4 configure脚本自动生成Makefile脚本

    3.2.5 编译nginx

    3.2.6 安装nginx

    3.3 ubuntu 防火墙开启80端口

    3.4 启动并访问nginx

    3.5 配置软链接任意路径启动nginx

    3.6 停止nginx服务4种方法

    3.7 nginx其他命令

    4、使用systemctl控制Nginx开机自启动

    4.1 创建nginx.service

    4.2 编辑nginx.service服务启动文件

    4.3 使服务启动文件生效

    4.4 启动nginx

    4.5 关闭nginx

    4.6 重启nginx

    4.7 开机启动

    4.8 测试

    5、nginx的配置

    5.1 nginx文件结构

    5.2 基础配置文件

    5.3 配置文件详解

    5.4 配置文件实例

    6、nginx安装常见问题


    要部署普通的java web项目,需要在linux上搭建好web服务器运行环境,包括JDK、tomcat、mysql、redis、nginx等,本文主要介绍nginx的下载安装配置,linux系统采用的是ubuntu。nginx官网地址:http://nginx.org/ 。nginx官方文档:nginx documentation

    1、nginx介绍

    Nginx (engine x) 是一个是一款轻量级、高性能的WEB和反向代理服务器,同时也提供了IMAP/POP3/SMTP代理服务,在BSD-like 协议下发行。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。2021年5月25日发布的最新稳定版本为1.20.1。

    Nginx 可以在大多数 Unix Linux OS 上编译运行,并有 Windows 移植版。 特点是占有内存少,并发能力强,在连接高并发的情况下,Nginx是Apache服务不错的替代品。一般情况下,对于新建站点,建议使用最新稳定版作为生产版本。

    nginx优点:

    • 1、轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源。
    • 2、抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
    • 3、nginx 处理静态文件好,静态处理性能比 apache 高三倍以上。
    • 4、nginx 的设计高度模块化,编写模块相对简单。
    • 5、nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃。
    • 6、nginx 作为负载均衡服务器,支持 7 层负载均衡。
    • 7、nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器。
    • 8、启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级
    • 9、社区活跃,各种高性能模块出品迅速

    Apache优点:

    • 1、apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache
    • 2、apache 发展到现在,模块超多,基本想到的都可以找到
    • 3、apache 更为成熟,少 bug ,nginx 的 bug 相对较多
    • 4、apache 超稳定
    • 5、apache 对 PHP 支持比较简单,nginx 需要配合其他后端用
    • 6、apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。

    apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区。两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程。一般来说,需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache 。更为通用的方案是,前端 nginx 抗并发,后端 apache 集群,配合起来会更好。

    nginx应用场合:

    • 静态服务器(图片,视频服务),另个lighttpd。并发几万,html,js,css,flv,jpg,gif等。
    • 动态服务,nginx—fastcgi 方式运行PHP,jsp。(PHP并发约500-1500,MySQL 并发约300-1500)。
    • 反向代理,负载均衡。日pv2000W以下,都可直接用nginx做代理。
    • 缓存服务。类似 SQUID,VARNISH。

    2、nginx的下载

    进入ningx官网下载地址:http://nginx.org/en/download.html,下载最新稳定版本(stable)或者复制下载链接后直接下载到服务器上。

    wget http://nginx.org/download/nginx-1.20.1.tar.gz

    3、nginx的安装

    linux的Ubuntu和Center os系统安装方式是不一样的。可以通过 cat /proc/version 命令查看linux系统。在Ubuntu下安装Nginx有2种方法,基于APT源安装和编译源码安装,如果想要安装最新版本的就必须下载源码包编译安装。

    连接服务器后,获取root权限,执行sudo apt update(如果已经是root权限可以去掉sudo),检查可更新的软件包汇总情况,如果有需要更新的软件包,可以使用以下命令更新:sudo apt upgrade 软件包名

    3.0 nginx的卸载

    使用命令 nginx -v 查看nginx的版本号,若已安装了nginx但版本不符合要求,可以通过以下命令卸载。有输入提示时,输入Y即可。

    # 彻底卸载nginx
    apt-get --purge autoremove nginx

    3.1 基于APT源安装

    sudo apt-get install nginx

    安装过程会让选一个Y同意占用内存。

    安装好的文件位置:

    • /usr/sbin/nginx:主程序
    • /etc/nginx:存放配置文件
    • /usr/share/nginx:存放静态文件
    • /var/log/nginx:存放日志
    • /etc/init.d/:创建了启动脚本nginx
    • 默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)

    通过这种方式安装的,会自动创建服务,会自动在/etc/init.d/nginx新建服务脚本,然后就可以使用sudo service nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}的命令启动。创建好的文件由于放在/usr/sbin目录下,所以能直接在终端中使用nginx命令而无需指定路径。

    通过nginx -v 命令查看nginx是否安装成功,service nginx start 启动nginx。

    3.2 编译源码安装

    编译源码安装这种方式可以自定安装指定的模块以及最新的版本。方式更灵活。

    3.2.1 安装依赖包

    apt-get install gcc
    apt-get install libpcre3 libpcre3-dev
    apt-get install zlib1g zlib1g-dev
    # Ubuntu20.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
    #apt-get install openssl openssl-dev
    sudo apt-get install openssl 
    sudo apt-get install libssl-dev
    

    3.2.2 解压nginx tar包

    在Ubuntu服务器的/opt目录下新建nginx目录,将下载的nginx-1.20.1.tar.gz安装包复制到该目录下解压。解压命令:tar -zxvf nginx-1.20.1.tar.gz 。

    • 也可以将nginx安装到/usr/local目录下,即 /usr/local/nginx 目录。
    cd /opt
    mkdir nginx
    cd nginx
    wget wget http://nginx.org/download/nginx-1.20.1.tar.gz
    tar -zxvf nginx-1.20.1.tar.gz

    3.2.3 nginx文件夹改名并进入到该目录

    如果使用的是没有权限的非root账户,则在命令的前面加上 sudo。

    3.2.4 configure脚本自动生成Makefile脚本

    nginx源码的编译需要使用configure脚本自动生成Makefile脚本,configure脚本支持许多选项,来控制安装的各种属性。

    进入到nginx解压后的目录中,执行命令:./configure --prefix=/nginx   (--prefix=/nginx指明软件安装的路径,/nginx是为安装nginx新建的目录,可以不指定)。

    • 使用./configure --help查看各模块使用情况,用 --without-http_ssi_module 方式关闭不需的模块。可用 --with-http_perl_modules 方式安装需要的模块(如:./configure --prefix=/data/nginx-1.10.1 --user=nginx --group=nginx  --with-http_ssl_module  --with-http_stub_status_module)。
    • 注意:nginx的一些模块需要依赖其他第三方的库,通常有pcre库(支持rewrite模块)、zlib库(支持gzip模块)和openssl库(支持ssl模块)等。
    # 进入nginx目录
    /opt/nginx/nginx-1.20.1-server1
    # 执行命令
    ./configure

    3.2.5 编译nginx

    执行make命令编译,可以看到屏幕上nginx源代码编译的过程。

    3.2.6 安装nginx

    使用 make install 命令完成安装后,将当前目录定位到 /usr/local/nginx 下,就可以查看nginx的全部资源了,主要有4个文件夹组成:conf、html、logs、sbin。

    • conf目录中存放nginx的所有配置文件
    • html目录中存放了nginx服务器在运行过程中调用的一些html网页文件
    • logs用来存放nginx服务器日志的
    • sbin目录存放的是nginx的主程序

    3.3 ubuntu 防火墙开启80端口

    如果nginx的80端口不在防火墙启用规则中,需添加进去,sudo ufw allow 80,然后通过sudo ufo status 可以查看到80 端口已开放。

    • 防火墙禁用端口命令:ufw deny端口
    • 关闭防火墙命令:ufw disable

    3.4 启动并访问nginx

    进入nginx启动目录/usr/local/nginx/sbin,通过 ./nginx 命令启动nginx。可以通过-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,默认配置文件地址为: /usr/local/nginx/conf/nginx.conf。可通过nginx -t 查看配置文件的信息。

    cd /usr/local/nginx/sbin
    
    # 无参数启动nginx,nginx会自动加载默认路径的配置文件
    ./nginx
    
    # 有参数启动nginx - 指定配置文件
    sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    注意:-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,可以通过-h查看帮助命令。
    
    #查看进程:
    ps -ef | grep nginx
    #查看进程:
    ps aux | grep nginx
    
    #systemctl命令启动
    systemctl start nginx
    
    # 重启Nginx服务
    systemctl restart nginx
    
    # 查看端口号
    netstat -tlnp

    访问nginx

    网页输入ip地址,访问成功,到此,nginx安装完毕。

    3.5 配置软链接任意路径启动nginx

    配置软链接在usr/bin/nginx(该路径在系统PATH下),可以在任意路径下直接输入nginx启动(不需要指定执行路径)。

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

    3.6 停止nginx服务4种方法

    1)从容停止服务

    命令:nginx -s quit ,这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止。

    2)立即停止服务

    命令:nginx -s stop,这种方法比较强硬,无论进程是否在工作,都直接停止进程。

    3)systemctl 停止

    命令:systemctl stop nginx.service,systemctl属于Linux命令。

    4)killall 方法杀死进程

    命令:killall nginx,直接杀死进程,在上面无效的情况下使用,态度强硬,简单粗暴!

    3.7 nginx其他命令

    1)重新载入配置文件

    当有系统配置文件有修改,使用命令nginx -s reload重新载入配置文件,建议不要停止再重启,以防报错!

    2)测试nginx配置文件是否正常命令 nginx -t 

    root@xnzysq20210118001:/usr/local# nginx -t 
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    root@xnzysq20210118001:/usr/local# 
    

    3)检查进程是否正常

    通过命令 netstat -lntup |grep nginx  或 ps -ef | grep nginx 检查进程是否正常。

    4)查看html是否正常

    通过http命令行工具curl访问http://localhost是否正常。curl -I http://localhost  或 curl http://localhost

    5)nginx -V 查看已经编译的参数,nginx -v 查看版本

    6)使用kill命令操作nginx。格式:kill -信号 PID

    信号名称:

    • TERM,INT 快速关闭
    • QUIT 优雅的关闭,保持吸纳有的客户端连接
    • HUP 重启应用新的配置文件
    • USR1 重新打开日志文件
    • USR2 升级程序
    • WINCH 优雅的关闭工作进程

    例子:

    • kill -QUIT  `cat /data/nginx/nginx.pid`
    • kill -HUP `cat /data/nginx/nginx.pid`

    7)nginx其他命令

    nginx -s signal

    signal:

    • stop — fast shutdown
    • quit — graceful shutdown
    • reload — reloading the configuration file
    • reopen — reopening the log files
    • 用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中

    nginx -h 或 nginx -? 显示帮助信息

    4、使用systemctl控制Nginx开机自启动

    Systemctl是一个系统管理守护进程、工具和库的集合,用于取代System V、service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器。

    通过Systemctl –help可以看到该命令主要分为:查询或发送控制命令给systemd服务,管理单元服务的命令,服务文件的相关命令,任务、环境、快照相关命令,systemd服务的配置重载,系统开机关机相关的命令。 

    4.1 创建nginx.service

    cd到 /usr/lib/systemd/system目录下,创建nginx服务启动文件,vim nginx.service(或用绝对路径创建vim /usr/lib/systemd/system/nginx.service),vim表示编辑一个文件,若文件不存在则创建。

    4.2 编辑nginx.service服务启动文件

    [Unit]
    
    Description=nginx -high performance web server
    
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    
    Type=forking
    
    WorkingDirectory=/usr/local/nginx
    
    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
    
    PrivateTmp=true
    
    [Install]
    
    WantedBy=multi-user.target

    4.3 使服务启动文件生效

    systemctl daemon-reload

    4.4 启动nginx

    systemctl start nginx

    4.5 关闭nginx

    systemctl stop nginx

    4.6 重启nginx

    systemctl restart nginx

    4.7 开机启动

    systemctl enable nginx

    4.8 测试

    通过http命令行工具curl访问http://localhost是否正常。使用 ps aux|grep nginx 命令查看进程。使用 netstat -ntlp 命令查看网络端口情况。

    5、nginx的配置

    5.1 nginx文件结构

    • 1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
    • 2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
    • 3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
    • 4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
    • 5、location块:配置请求的路由,以及各种页面的处理情况。
    ...              #全局块
    
    events {         #events块
       ...
    }
    
    http      #http块
    {
        ...   #http全局块
        server        #server块
        { 
            ...       #server全局块
            location [PATTERN]   #location块
            {
                ...
            }
            location [PATTERN] 
            {
                ...
            }
        }
        server
        {
          ...
        }
        ...     #http全局块
    }

    5.2 基础配置文件

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    5.3 配置文件详解

    #nginx进程,一般设置为和cpu核数一样
    worker_processes 4;                        
    #错误日志存放目录 
    error_log  /data1/logs/error.log  crit;  
    #运行用户,默认即是nginx,可不设置
    user nginx       
    #进程pid存放位置
    pid        /application/nginx/nginx.pid;        
    
    #Specifies the value for maximum file descriptors that can be opened by this process. 
    #最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
    worker_rlimit_nofile 51200;
    
    cpu亲和力配置,让不同的进程使用不同的cpu
    
    worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;
    
    #工作模式及连接数上限
    events 
    {
      use epoll;       #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
      worker_connections 1024;  #;单个后台worker process进程的最大并发链接数
    }
    ###################################################
    http 
    {
    
    include mime.types; #文件扩展名与类型映射表
    default_type application/octet-stream; #默认文件类型
    
      #隐藏响应header和错误通知中的版本号
      server_tokens off;
      #开启高效传输模式   
      sendfile on;
    
    -------------------------------------------------------------------------------------------------
      #激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,
      积极的作用是减少网络报文段的数量
      tcp_nopush     on;
      #激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
      tcp_nodelay on;
    #连接超时时间,单位是秒
      keepalive_timeout 60;
    
      #开启gzip压缩功能
        gzip on;
     #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩。建议设置成大于1K。如果小于1K可能会越压越大。
      gzip_min_length  1k;
    
    #压缩缓冲区大小。表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
      gzip_buffers     4 16k;
    
    #压缩版本(默认1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
      gzip_http_version 1.0;
    
    #压缩比率。用来指定GZIP压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源。
      gzip_comp_level 9;
    
    #用来指定压缩的类型,“text/html”类型总是会被压缩
      gzip_types       text/plain application/x-javascript text/css application/xml;
      #vary header支持。该选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用
    
    Squid缓存经过Nginx压缩的数据。
    
    gzip_vary off;
    #开启ssi支持,默认是off
      ssi on;
      ssi_silent_errors on;
    #设置日志模式
        log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" $http_x_forwarded_for';
    
    #反向代理负载均衡设定部分
    
    #upstream表示负载服务器池,定义名字为backend_server的服务器池
    upstream backend_server {
        server   10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
        server   10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
        server   10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
        server   10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
      #设置由 fail_timeout 定义的时间段内连接该主机的失败次数,以此来断定 fail_timeout 定义的时间段内该主机是否可用。默认情况下这个数值设置为 1。零值的话禁用这个数量的尝试。
    
    设置在指定时间内连接到主机的失败次数,超过该次数该主机被认为不可用。
    
    #这里是在30s内尝试2次失败即认为主机不可用!
      }
    ###################
    
    #基于域名的虚拟主机
      server
      {
    
    #监听端口
        listen       80;
        server_name  www.abc.com abc.com;    
        index index.html index.htm index.php;    #首页排序
        root  /data0/abc;                            #站点根目录,即网站程序存放目录 
        error_page 500 502 404 /templates/kumi/phpcms/404.html;   #错误页面
    #伪静态   将www.abc.com/list....html的文件转发到index.php。。。
    #rewrite ^/list-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /index.php?m=content&c=index&a=lists&catid=$1&types=$2&country=$3&language=$4&age=$5&startDate=$6&typeLetter=$7&type=$8&page=$9 last;
    #location 标签,根目录下的.svn目录禁止访问
        location ~ /.svn/ {
         deny all;
        }
                location ~ \.php$   
                 {  #符合php扩展名的请求调度到fcgi server  
                  fastcgi_pass  127.0.0.1:9000;  #抛给本机的9000端口
                  fastcgi_index index.php;    #设定动态首页
                  include fastcgi.conf;
                 }

    5.4 配置文件实例

    ########### 每个指令必须有分号结束。#################
    #user administrator administrators;  #配置用户或者组,默认为nobody nobody。
    #worker_processes 2;  #允许生成的进程数,默认为1,一般设置为和cpu核数一样
    #pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
    error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
    events {
        accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
        multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
        #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
        worker_connections  1024;    #最大连接数,默认为512
    }
    http {
        include       mime.types;   #文件扩展名与文件类型映射表
        default_type  application/octet-stream; #默认文件类型,默认为text/plain
        #access_log off; #取消服务日志    
        log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
        access_log log/access.log myFormat;  #combined为日志格式的默认值
        sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
        sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
        keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。
    
        upstream mysvr {   
          server 127.0.0.1:7878;
          server 192.168.10.121:3333 backup;  #热备
        }
        error_page 404 https://www.baidu.com; #错误页
        server {
            keepalive_requests 120; #单连接请求上限次数。
            listen       4545;   #监听端口
            server_name  127.0.0.1;   #监听地址       
            location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
               #root path;  #根目录
               #index vv.txt;  #设置默认页
               proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
               deny 127.0.0.1;  #拒绝的ip
               allow 172.18.5.54; #允许的ip           
            } 
        }
    }

    需要注意的有以下几点:

    • 1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
    • 2.$remote_user :用来记录客户端用户名称;
    • 3.$time_local : 用来记录访问时间与时区;
    • 4.$request : 用来记录请求的url与http协议;
    • 5.$status : 用来记录请求状态;成功是200;
    • 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
    • 7.$http_referer :用来记录从那个页面链接访问过来的;
    • 8.$http_user_agent :记录客户端浏览器的相关信息;
    • 9.惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能;
    • 10.每个指令必须有分号结束;

    6、nginx安装常见问题

    1)nginx 安装报错:make: *** No rule to make target `build', needed by `default'. Stop.

    出现此种情况,是linux系统没有安装先决条件

    1、GCC——GNU编译器集合(GCC可以使用默认包管理器的仓库(repositories)来安装,包管理器的选择依赖于你使用的Linux发布版本,包管理器有不同的实现:yum是基于Red Hat的发布版本;apt用于Debian和Ubuntu;yast用于SuSE Linux等等。)

    RedHat中安装GCC:yum install gcc

    Ubuntu中安装GCC:apt-get install gcc

    2、PCRE库(Nginx编译需要PCRE(Perl Compatible Regular Expression),因为Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。这里需要安装两个安装包pcre和pcre-devel。第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码,这正是我们需要的理由。)

    RedHat中安装PCRE:yum install pcre pcre-devel

    Ubuntu中安装PCRE:apt-get install libpcre3 libpcre3-dev

    3、zlib库(zlib库提供了开发人员的压缩算法,在Nginx的各种模块中需要使用gzip压缩。如同安装PCRE一样,同样需要安装库和它的源代码:zlib和zlib-devel。)

    RedHat中安装zlib:yum install zlib zlib-devel

    Ubuntu中安装zlib:apt-get install zlib1g zlib1g-dev

    4、OpenSSL库(在Nginx中,如果服务器提供安全网页时则会用到OpenSSL库,我们需要安装库文件和它的开发安装包(openssl和openssl-devel)。)

    RedHat中安装OpenSSL:yum install openssl openssl-devel

    Ubuntu中安装OpenSSL:apt-get install openssl openssl-dev

    # Ubuntu20.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
    #apt-get install openssl openssl-dev
    sudo apt-get install openssl 
    sudo apt-get install libssl-dev

    展开全文
  • 检查安装环境没有就安装 rpm -qa|grep gcc*(或者pcre/zlib/openssl) 现在购买的腾讯云服务器好像都已经安装好了 - sudo yum install gcc-c++ ...到nginx.org下载nginx通过ftp传输过来 mkdir /develo.

    其他文章

    云服务器和域名准备
    安装FTP文件服务器
    linux安装jdk1.8
    linux安装tomcat8
    linux安装MySQL(5.6)
    linux安装redis

    安装nginx

    • 检查安装环境没有就安装
    rpm -qa|grep gcc*(或者pcre/zlib/openssl)
    

    现在购买的腾讯云服务器好像都已经安装好了

    - sudo yum install gcc-c++
    - sudo yum install pcre pcre-devel
    - sudo yum install zlib zlib-devel
    - sudo yum install openssl openssl-devel
    
    • 到nginx.org下载nginx通过ftp传输过来
    mkdir /developer
    mv /ftpfile/nginx-1.16.1.tar.gz /developer/
    cd /developer/
    
    • 解压
    tar -zxvf nginx-1.16.1.tar.gz
    
    • 进入/developer/nginx-1.16.1 (我是下载在/developer文件夹解压的1.16.1版本)
    cd /developer/nginx-1.16.1 
    
    • 检查
    sudo ./configure
    
    • 编译
    sudo make
    
    • 安装
    sudo make install
    
    • 查看nginx位置
    whereis nginx
    

    在这里插入图片描述

    cd /usr/local/nginx/sbin/
    
    • 启动nginx
    sudo ./nginx
    
    • 查看nginx进程
    ps aux | grep nginx
    

    在这里插入图片描述

    • 平滑重启
      平滑重启就是热部署的一种应用,一般当我们修改nginx的配置文件的时候才需要重启nginx,平滑重启就可以在不停止再启动nginx服务器的情况下,来更新配置文件。

      首先查看nginx pid

    ps -ef | grep nginx
    

    在这里插入图片描述

    kill -HUP nginxpid
    # 本例就是 kill -HUP 27607
    
    • 一般重启
    /usr/local/nginx/sbin/nginx -s reload  
    #这个url根据自己的下载配置来变化
    

    配置nginx

    最神奇的一步开始了!

    提示:其实到这一步之前,我们的服务器已经搭建完成了。由于现在工信部监测的十分严格,没有备案的域名是无法使用的(如下图)。如果大家不想备案域名,我们也是可以正常使用服务器的,只不过访问的时候我们要显视地通过ip和端口组合来访问相应的资源。那么下面的内容可以忽略不看。
    在这里插入图片描述

    我们在/usr/local/nginx/conf目录下建一个vhost文件夹,这个文件夹专门保存nginx的配置,这样只需在nginx.conf中导入这些配置就ok了。这等同于直接在nginx.conf中配置,但是前者更有利于后期维护。

    cd /usr/local/nginx/conf
    
    mkdir vhost
    
    
    sudo vim nginx.conf (就在/usr/local/nginx/conf路径下执行)
    
    在nginx.conf文件的最下面加上:
    include vhost/*.conf;
    

    这样nginx服务器就会自动加载我们在vhost中编写的conf文件,非常易于后期维护

    ESC :wq保存退出

    下面我们就开始写自己的转发配置文件

    cd vhost/
    

    1. 首先我们写一个转发到服务器固定目录url的配置文件

    例如我们的资源都放在服务器/code/test/目录里,我们可以直接将一个域名对应这个目录。

    • 首先去云平台控制台域名管理,解析域名
      在这里插入图片描述

    • 选择自己的一个域名,进入解析配置页面

    • 添加一条记录
      在这里插入图片描述

    • 填写记录信息
      在这里插入图片描述

    • 例如abc.mydomin.com,首先在vhost目录建立配置文件:

    vim abc.mydomin.com.conf   #这样命名是不是非常规范易懂
    
    • 复制下面的配置

    PS:如果想了解配置中的具体含义是什么,请参考:nginx配置常见参数含义及用法

    server {
        default_type 'text/html';
        charset utf-8;
        listen 80;
        autoindex on;
        server_name abc.mydomin.com;        #写自己的域名
        access_log /usr/local/nginx/logs/access.log combined;
        index index.html index.htm index.jsp index.php;
        #error_page 404 /404.html;
        if ( $query_string ~* ".*[\;'\<\>].*" ){
            return 404;
        }
        
        location / {
            root /code/test/;
            add_header Access-Control-Allow-Origin *;
        }
    }
    

    ESC :wq 保存退出

    • 去创建一个示例代码
    cd /code/test/
    vim index.htm
    

    在index.htm文件中输入

    This is a welcome page!
    

    ESC :wq 保存退出

    • 重启nginx
    /usr/local/nginx/sbin/nginx -s reload
    
    • 打开浏览器输入我们的域名
      在这里插入图片描述

    大功告成

    2.接着写一个转发到固定端口的配置文件

    例如:将abc2.mydomin.com对应到127.0.0.1:8080端口,那么我们在地址栏输入该abc域名和输入ip:端口是等价的。

    • 同样要先去控制台解析域名,创建配置文件,参考上一步

    • 注意配置文件需要修改的地方

    server {
        default_type 'text/html';
        charset utf-8;
        listen 80;
        autoindex on;
        server_name abc2.mydomin.com;
        access_log /usr/local/nginx/logs/access.log combined;
        index index.html index.htm index.jsp index.php;
        #error_page 404 /404.html;
        if ( $query_string ~* ".*[\;'\<\>].*" ){
            return 404;
        }
        location / {
            proxy_pass http://127.0.0.1:8080;
            add_header Access-Control-Allow-Origin *;
        }
    }
    
    • 其余步骤和上面一样,别忘了去控制台开放端口
    • 输入域名测试一下
      在这里插入图片描述
      这里404说资源没有找到,因为我们什么也没放所以也是合理的。但是以前我做的时候没有资源它都会默认转发到tomcat的页面,有点搞不明白,不过证明我们的nginx是正常的。
    展开全文
  • Linux搭建nginx服务器

    2022-08-24 19:50:28
    Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。Nginx 代码完全用C语言...
  • 1、先来安装nginx的依赖 1、gcc 安装 yum install -y gcc gcc-c++ 2、PCRE pcre-devel 安装 yum install -y pcre pcre-devel 3、zlib 安装 yum install -y zlib zlib-devel 4、OpenSSL 安装 yum install -y ...
  • 轻松使用Nginx搭建web服务器

    千次阅读 2018-09-29 14:24:39
    如果读者以前做过web开发的话,就应该知道如何去搭建一个web服务器来跑你的web站点,在windows下你可能会选择去用IIS,十分的快捷,在linux下,你可能首先会想到apache,“一哥”( W3Techs网站数据的排名)啦 ...
  • linux搭建nginx WEB服务器的教程.docx
  • 配置文件在 /usr/local/nginx/conf 目录下,将配置文件拉到本地编辑,改完了别忘了上传覆盖。指定安装路径(如果不指定,将默认安装在/usr/local/bin)location - root字段: 前端项目存放路径,目录随意。如果有...
  • Macromedia随后被Adobe收购,因为该规范已部分发布,使第三方能够在Adobe自己的服务器和客户端软件中实现它。这导致了在为各种提供商提供流媒体时常用的技术。在本文中,我们将记录在Centos 3.10上使用Nginxp-RTMP...
  • 1. 将springboot项目使用maven插件打包成jar,在target下有一个jar文件 这个插件就是将项目之外的lib包一起打包部署 2. 使用xshell或者modelX连接linux测试环境地址(地址ip 用户名和密码给公司要) ...上床Nginx
  • nginx搭建web服务器且在Windows下设置开机自动启动的所有工具和方法
  • Windows环境利用nginx搭建web服务器

    千次阅读 2019-04-17 14:17:13
    nginx官网下载地址:http://nginx.org/en/download.html ...解压完成后双击nginx.exe即可运行nginx 双击运行会有一个窗口一闪而过,如果在浏览器上输入ip能显示如下界面则表示nginx正常启动运...
  • ubuntu安装nginx web服务器
  • 实现目标:Linux构建Nginx主流WEB服务器并通过浏览器访问 下载Nginx包 http://nginx.org/download/nginx-1.4.7.tar.gz yum install lrzsz -y //安装 lrzsz 工具 rz -y //上传刚才下载的Nginx包 tar -xzvf nginx-...
  • nginx配置web服务器

    千次阅读 2020-12-15 19:18:47
    nginx配置 web服务器 使用的web框架:python-flask 如图:listen监听的端口号就是外部流量访问web服务器的port url路径大致为: http://10.1.118.38:2020 可以在浏览器中访问。如果配置了高可用,其中的ip 也可以换...
  • Linux服务器利用Nginx搭建网站

    千次阅读 2022-02-22 23:35:55
    利用Nginx搭建网站(Ubuntu 20.04 LTS) 步骤1:安装Nginx 1.执行以下命令,安装Nginx sudo apt-get install nginx 2.执行以下命令,查看Nginx服务状态 sudo systemctl status nginx # 出现active(running)则表示...
  • LinuxNginx搭建代理服务器
  • web服务器(httpd,nginx
  • nginx安装
  • 一、什么是 Nginx?是一个高性能的和反向代理服务器,也提供了服务,由伊戈尔·赛索耶夫为俄罗斯访问量第二的站点而开发,第一个公开版本发布于,特点是占有内存少,并发能力强,专为性能优化而开发,稳定性和低系统...
  • Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 ...本文是W3CGROUP在成功架设Nginx+Php Web服务器之后的一个总结,成功设置Nginx开启多域名多站点,并且不会出现502 Bad Gateway错误! 本文测
  • 先安装Nginx,看我之前发的文章: 搭建Nginx服务器 二、安装vsftpd 再安装vsftpd组件,看我之前发的文章: Linux安装ftp组件(8步完成) 三、开始搭建Nginx图片服务器 1、效果 例如:图片通过ftp服务上传到/home/...
  • 配置Nginx作为一个Web服务器

    千次阅读 2021-08-10 09:23:43
    Nginx配置文件必须包含至少一个server指令来指明一个虚拟服务,当Nginx处理一个请求时,第一步就是选择虚拟节点来处理该请求。一个虚拟服务通过server指令在http上下文中定义: http { server { # Server ...
  • nginx搭建web服务器

    千次阅读 2018-11-02 17:44:10
    nginx的优点  1、可以高并发连接 ... 原因,主要是Nginx使用了最新的epoll(Linux2.6内核)和kqueue(freeBSD)网路I/O模型,而Apache使用的是传统的Select模型,其比较稳定的Prefork模式为多进...
  • linux nginx搭建与配置

    千次阅读 2022-05-04 21:22:42
    nginx 安装 配置 反向代理 会话保持

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,006
精华内容 19,602
热门标签
关键字:

linux nginx搭建web服务器