linux_nginx环境配置

Posted 北门吹雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux_nginx环境配置相关的知识,希望对你有一定的参考价值。

rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm

# 安装阿里的epel源

国内使用web站点最多的www服务是nginx

官方网址:nginx.org

什么是Nginx

       开源、支持高性能、高并发的www服务软件,一种http协议的实现

       优点:

              高并发(静态资源)

              占用资源少

              功能丰富(反向代理、负载均衡)

              高效稳定

Nginx有哪些应用?

  1. 经典组合 LAMP(linux apache mysql php
  2. 现在组合: LNMP(linux nginx mysql php)
  3. web服务软件,具有反向代理功能,稳定高效运行
  4. 可以运行在任何已知的平台

Nginx总体为何比apache性能高?

  1. Nginx采用epoll IO模型,而apache采用传统select IO模型

  2. 对于要求高并发的站点,采用epoll更加高效

Nginx有哪些常见的模块?

  1. Nginx核心模块

    负责Nginx全局应用,对应配置文件的Main区块和Events区块,包含nginx必须的全局参数配置

  2. 标准的http功能模块集合

    默认自动安装到Nginx中,不建议改动默认,软件默认配置一般都是最优

如何编译安装Nginx

安装前首先明白这几个问题,选择什么版本?选择安装目录是什么?下载包放哪?安装Nginx软件相关依赖

    这里按照http://www.cnblogs.com/2bjiujiu/p/8067201.html 策略选择版本,并且web集群中其他节点都统一使用该版本,选择其中任何一版稳定版

    任何通过编译安装,安装目录统一规定放到 /application 目录下

    统一规定,从网站上下载的包放到当前用户家目录下 tools目录下

  2. 安装Nginx软件相关依赖

    安装依赖软件:pcre pcre-devel openssl openssl-devel

yum install -y pcre pcre-devel openssl openssl-devel

# pcre库,开发正则,为了支持Nginx的URL重写rewrite模块

# openssl库,安全加密相关的库

  3. 下载并解压

mkdir ~/tools                        # 创建统一存放下载包的目录

cd ~/tools                             # 切到这个目录下

wget -q http://nginx.org/download/nginx-1.12.2.tar.gz           # 下载源码包

tar -xf nginx-1.12.2.tar.gz     # 解压

cd nginx-1.12.2                    # 进入源码包

  4. 隐藏Nginx软件包信息

    1. 更改nginx软件名

vim src/core/nginx.h                          # 修改全局的参数

         13        #define NGINX_VERSION      "1.12.2"             # 更改版本号
                              # 更改为 apache最新版本号,迷惑性

         14        #define NGINX_VER          "nginx/" NGINX_VERSION
                              # 更改掉 nginx,更改为www

         22        #define NGINX_VAR          "NGINX"
                              # 更改NGINX,这个是软件名,更改为WWW
vim src/http/ngx_http_header_file_module.c

         49  static u_char ngx_http_server_string[] = "Server: nginx" CRLF;

         # 把49行 "Server: nginx"改为  "Server: www"

# 注意其中空格和格式

    2. 更改错误提示

vim src/http/ngx_http_special_response.c

         36行 "<hr><center>nginx</center>" CRLF

         # 把<center>nginx</center> 改为 <center>www</center>

         # 这里还可以添加标签"<hr><center>www(www.baidu.com) </center>"

    3. 添加软件运行用户,编译和安装

useradd web_nginx -s /sbin/nologin -M    # 添加web_nginx运行的用户

id web_nginx                                           # 检查

./configure --user=web_nginx --group=web_nginx --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.12.2/   

# --user= 和 --group= 指定用什么身份运行

# --with-http_ssl_module 为HTTPS提供了必要的支持,需要OpenSSL库

# --with-http_stub_status_module 提供对基本状态信息的访问

# --prefix= 指定安装路径,需要后面再指定一个nginx源码包名字目录,做版本号区分

make && make install                # 编译和安装

    4. 创建软链接

ln -s /application/nginx-1.12.2/ /application/nginx

# 去掉版本号,然开发不需要关注版本信息,软件升级的时候,对于开发来说没有任何影响

# 软件调用时候,也不需要关系版本号,软件升级也不影响开发和软件调用

    5. 测试

      1. 启动Nginx

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

/application/nginx/sbin/nginx                      # 启动nginx

netstat -lntup | grep 80                               # 检查

      2. 检查

打开浏览器访问 host_ip                       # 访问主机外网IP地址

# 如果返回Nginx欢迎页面表示Nginx安装成功

curl -I host_ip                  # 检查是否隐藏了版本号和版本信息

Nginx安装过程中可能出现的错误有哪些?

  1. 启动Nginx报错,nginx: [emerg] getpwnam(“web_nginx”) faild

    原因: 没有添加nginx运行需要的用户

    解决方法: useradd web_nginx -s /sbin/nologin -M

  2. 编译过程报错,gcc不全导致错误

    解决方法: yum install -y gcc-c++

  3. 检查系统初始化时候有没有安装基础包

yun grouplist                # 查看已经安装的包

# 重点关注以下包,如果没安装通过 yum groupinstall -y "包名" 进行安装

# Base

# Compatibility libraries

# Debugging Tools

# Development tools

  4. 检查服务本地端口、进程和URL

lsof -i :80                      # 检查端口80是否有服务
ps -ef | grep nginx        # 检查是否有nginx进程

# 检查浏览器输入的主机地址是否正确,是不是主机外网IP,端口连接符号是否是英文格式

  5. 查看错误日志信息

其日志文件路径: /application/nginx/logs/error.log

# 前提是Nginx安装目录规范为/application和软链接建立正确
# cat /application/nginx/logs/error.log

Web服务错误如何排错

  1. 客户端 ping 服务器ip地址

     ping 10.0.0.8                # 排除物理线路故障

  2. 客户端上telnet 服务器ip地址

    telnet 10.0.0.8 80         # 排除防火墙故障

  3. liunx客户端检查

    curl 10.0.0.8                 # 模拟浏览器请求

    # wget 10.0.0.8     会把网页下载下来

Nginx配置文件参数

       位置: /application/nginx/conf/nginx.conf

       worker_processes                       # 进程数量

       events                                       # 模型

       worker_connections                  # 一个进程连接最大连接数

       http                                          # http相关配置

       include                                     # 包含配置文件关键字

       sendfile                                    # 高效分发模式

       keepalive_timeout                    # 一个活着的连接保持时间

       server                                      # 虚拟主机,对应一个站点

       listen                                       # 监听端口

       server_name                            # 域名,多个中间空格隔开

       location                                   # 对域名后字段进行匹配

       root                                         # 站点根目录

       index                                       # 返回首页地址

       error_page                               # 错误页面信息

什么是虚拟主机?

       配置文件中一个server字典对

    web服务器中独立的站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序和资源目录,可独立对外提供服务让用户访问

  有三个分类

    1. 域名

      最为广泛,应用外部网站,通过请求头进行区分,直接ip地址访问,默认第一个虚拟主机,在http模块中,多个server就会有多个虚拟主机,通过域名来区分主机

    2. 端口

      应用于公司内部,网站后台,通过端口来区分主机

    3. IP

      不支持辅助ip,几乎不用

更改配置文件原则是什么?

  1. 备份原文件,格式为: 原配置文件名_时间_修改版本号,这个是规范

      /application/nginx/conf/nginx.conf{,._$(date +%F)_v1}

  2. 任何单独修改完成,第二次修改需要备份一次,版本号+1

  3. 有检查错误方法,先调用检查,一般为 -t 参数

  4. 服务通过 reload 进行优雅重启

  5. 出现错误立马回滚,回到上一个版本

如何实现资源下载展示?

  1. 在对应的server中,添加 autoindex on; 字段,在访问没有资源的情况下,将会就这个资源根目录下所有内容都会列出来,提供下载。正常没有这个参数,会提示403错误

Nginx如何配置多个站点?

  1. 对于多个站点,需要多个server,都写在主配置文件中显得不太专业
  2. 在conf配置目录下,创建extra目录,用于存放站点server
  3. 在主配置文件http中添加 include extra/*.conf ,统一包含extra中配置

Nginx状态查看

vim extra/status.conf         # 添加nginx状态的虚拟机

server{

    listen 80;
    server_name status.benmenchuixue.com

    location /beimen {

        stub_status on;

        access_log off;

       #allow 172.16.1.0设置允许访问的ip段

       #deny all,禁止访问
    }

}

# 重启Nginx,然后访问这个域名实现获取nginx状态

# 这里联合监控使用,如果用户直接访问ip,通过rewrit跳转到首页,如果后面有有特殊标# 识将匹配到返回状态信息

# 注意html目录下index.html 和 50x.html会暴露软件版本信息,需要对这两个文件做信息脱敏处理,去掉特征信息展示     

如何禁止用户直接通过ip访问服务器?

vim forbid_ip.conf       # 写入一下内容

server {
    listen 80 default;
    server_name _;
    return 500;
}

# 直接通过ip访问,返回500错误

一键安装nginx

 

#!/bin/sh

# author: beimenchuixue
# email: 422083556@qq.com
# blog: http://www.cnblogs.com/2bjiujiu/

 . /etc/init.d/functions

install_path="/application"
nginx_package_name="nginx-1.12.2.tar.gz"
nginx_download_url="http://nginx.org/download/$nginx_package_name"
nginx_run_user="nginx"
down_path="$HOME/tools"
nginx_relay="pcre-devel openssl-devel gcc-c++"
change_name="www"
change_version="2.2.15"

[ -d $down_path ] || {
    mkdir $down_path -p
    action "init download path is" /bin/true
}

download_nginx() {
    cd $down_path
    wget -q $nginx_download_url
    [ $? -eq 0 ] && {
        action "download nginx is" /bin/true
    } || {
        action "download nginx is" /bin/false
        exit 1
    }
}
# download_nginx

install_nginx_relay() {
    yum install -y $nginx_relay &> /dev/null 
    [ $? -eq 0 ] || {
        action "install_nginx_relay is" /bin/false
        exit 2
    }
    action "install_nginx_relay is" /bin/true
}
# install_nginx_relay

add_run_nginx_user() {
     id $nginx_run_user &> /dev/null
     [ $? -eq 0 ] || {
        useradd $nginx_run_user -s /sbin/nologin -M
     }
     action "add_run_nginx_user is" /bin/true  
}
# add_run_nginx_user

untar_nginx() {
    cd $down_path
    tar -xf $nginx_package_name
    [ $? -eq 0 ] || {
        echo "$nginx_package_name not exit"
        action "install nginx is" /bin/false
        exit 3
    }
    action "tar -xf $nginx_package_name is" /bin/true
}

hiden_version() {
    cd $down_path
    cd `echo "$nginx_package_name"|sed "s#.tar.gz##g"`
    sed -i "s/`echo "$nginx_package_name"| sed "s/.tar.gz//g"\\
    |sed "s/nginx-//g"`/${change_version}/g" src/core/nginx.h
    sed -i "s/nginx\\//${change_name}\\//g" src/core/nginx.h
    sed -i "s/\\"NGINX\\"/\\"`echo $change_name|tr \'[a-z]\' \'[A-Z]\'`\\"/g" src/core/nginx.h
    sed -i "s/Server: nginx/Server: ${change_name}/g" src/http/ngx_http_header_filter_module.c
    sed -i "s/<center>nginx</<center>${change_name}</g" src/http/ngx_http_special_response.c
    action "nginx hiden version is" /bin/true
}
# hiden_version

install_nginx() {
    cd $down_path
    cd `echo "$nginx_package_name"|sed "s/.tar.gz//g"`
    ./configure \\
    --user=$nginx_run_user \\
    --group=$nginx_run_user \\
    --with-http_ssl_module \\
    --with-http_stub_status_module \\
    --prefix=$install_path/`echo "$nginx_package_name"|sed "s#.tar.gz##g"` &> /dev/null
    [ $? -eq 0 ] && {
        action "nginx configure is" /bin/true
    } || {
        action "nginx configure is" /bin/false
        exit 4
    }
    
    make &> /dev/null && {
        action "nginx make  is" /bin/true    
    } || {
        action "nginx make  is" /bin/false
        exit 5
    }

    make install &> /dev/null && {
        action "nginx  make install is" /bin/true
    } || {
        action "nginx  make install is" /bin/true
        eixt 6
    }

    ln -s $install_path/`echo "$nginx_package_name"|sed "s#.tar.gz##g"` $install_path/nginx && {
        action "create softlink is" /bin/true
    } || {
        action "create softlink is" /bin/false
        exit 7
    }
    action "nginx install is" /bin/true
}
# install_nginx

main() {
    download_nginx
    untar_nginx
    hiden_version
    install_nginx_relay
    add_run_nginx_user
    install_nginx
}
main

 

  

 

以上是关于linux_nginx环境配置的主要内容,如果未能解决你的问题,请参考以下文章

linux_nginx反向代理

VSCode 配置 用户自定义代码片段 自定义自动代码补充

vscode 开发微信小程序环境配置

全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置