zoukankan      html  css  js  c++  java
  • linux安装nginx以及相关环境配置

    安装nginx

    1. 环境准备
    yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel 
    

    解释:

    gcc为GNU Compiler Collection的缩写,可以编译C和C++源代码等,
    gcc-c++也能编译C源代码,只不过把会把它当成C++源代码,后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。
    automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成Makefile.in,automake还需用到perl,由于automake创建的发布完全遵循GNU标准,所以在创建中不需要perl。libtool是一款方便生成各种程序库的工具。
    pcre pcre-devel:在Nginx编译需要 PCRE(Perl Compatible Regular Expression),因为Nginx 的Rewrite模块和HTTP 核心模块会使用到PCRE正则表达式语法。
    zlip zlib-devel:nginx启用压缩功能的时候,需要此模块的支持。
    openssl openssl-devel:开启SSL的时候需要此模块的支持。
    

    2.下载nginx 安装包: 官网地址:http://nginx.org/

    没有安装wget的话先安装wget:yum install -y wget

    [root@localhost ~]# wget http://nginx.org/download/nginx-1.8.1.tar.gz
    
    
    1. 解压安装包
    tar -xzvf nginx-1.8.1.tar.gz
    
    1. 编译nginx:make

    编译是为了检查系统环境是否符合编译安装的要求,比如是否有gcc编译工具,是否支持编译参数当中的模块,并根据开启的参数等生成Makefile文件为下一步做准备:

    编译前:

    编译:

    [root@localhost nginx-1.8.1]# ./configure  --prefix=/usr/local/nginx  --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log  --http-log-path=/var/log/nginx/access.log  --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock  --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
    

    编译后:

    可以查看objs目录,看到makefile文件

    5、生成脚本及配置文件:make

    编译步骤,根据Makefile文件生成相应的模块

    6、安装:make install

    创建目录,并将生成的模块和文件复制到相应的目录:

    [root@localhost nginx-1.8.1]# make install
    make -f objs/Makefile install
    make[1]: 进入目录“/root/nginx-1.8.1”
    test -d '/usr/local/nginx' || mkdir -p '/usr/local/nginx'
    test -d '/usr/local/nginx/sbin' 		|| mkdir -p '/usr/local/nginx/sbin'
    test ! -f '/usr/local/nginx/sbin/nginx' 		|| mv '/usr/local/nginx/sbin/nginx' 			'/usr/local/nginx/sbin/nginx.old'
    cp objs/nginx '/usr/local/nginx/sbin/nginx'
    test -d '/usr/local/nginx/conf' 		|| mkdir -p '/usr/local/nginx/conf'
    cp conf/koi-win '/usr/local/nginx/conf'
    cp conf/koi-utf '/usr/local/nginx/conf'
    cp conf/win-utf '/usr/local/nginx/conf'
    test -f '/usr/local/nginx/conf/mime.types' 		|| cp conf/mime.types '/usr/local/nginx/conf'
    cp conf/mime.types '/usr/local/nginx/conf/mime.types.default'
    test -f '/usr/local/nginx/conf/fastcgi_params' 		|| cp conf/fastcgi_params '/usr/local/nginx/conf'
    cp conf/fastcgi_params 		'/usr/local/nginx/conf/fastcgi_params.default'
    test -f '/usr/local/nginx/conf/fastcgi.conf' 		|| cp conf/fastcgi.conf '/usr/local/nginx/conf'
    cp conf/fastcgi.conf '/usr/local/nginx/conf/fastcgi.conf.default'
    test -f '/usr/local/nginx/conf/uwsgi_params' 		|| cp conf/uwsgi_params '/usr/local/nginx/conf'
    cp conf/uwsgi_params 		'/usr/local/nginx/conf/uwsgi_params.default'
    test -f '/usr/local/nginx/conf/scgi_params' 		|| cp conf/scgi_params '/usr/local/nginx/conf'
    cp conf/scgi_params 		'/usr/local/nginx/conf/scgi_params.default'
    test -f '/usr/local/nginx/conf/nginx.conf' 		|| cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf'
    cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf.default'
    test -d '/var/run/nginx' 		|| mkdir -p '/var/run/nginx'
    test -d '/var/log/nginx' || 		mkdir -p '/var/log/nginx'
    test -d '/usr/local/nginx/html' 		|| cp -R html '/usr/local/nginx'
    test -d '/var/log/nginx' || 		mkdir -p '/var/log/nginx'
    make[1]: 离开目录“/root/nginx-1.8.1”
    
    

    备注:nginx完成安装以后,有四个主要的目录:

    conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其他的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉即可。
    html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。
    logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面。
    sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能。
    

    安装完nginx后的问题:

    1. 启动nginx

    输入nginx启动,报错未找到命令!!

    [root@localhost nginx-1.8.1]# nginx
    -bash: nginx: 未找到命令
    

    解决方法:配置nginx的环境变量

    进入 vim /etc/profile 文件,最后添加

    PATH=$PATH:/usr/local/nginx/sbin
    export PATH
    
    1. 继续nginx启动,报错!!!
    [root@localhost ~]# nginx
    nginx: [emerg] getpwnam("nginx") failed
    

    没有安装nginx用户导致的无法启动,需要添加nginx用户

    [root@localhost ~]# useradd -s /sbin/nologin -M nginx
    [root@localhost ~]# id nginx
    uid=1000(nginx) gid=1000(nginx) 组=1000(nginx)
    
    1. 继续nginx启动:报错!!!
    [root@localhost ~]# nginx
    nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory)
    

    解决方法:继续创建文件路径吧

    [root@localhost tmp]# mkdir -p /var/tmp/nginx
    [root@localhost tmp]# nginx
    [root@localhost tmp]# ps -ef | grep nginx
    root      18555      1  0 14:59 ?        00:00:00 nginx: master process nginx
    nginx     18556  18555  0 14:59 ?        00:00:00 nginx: worker process
    root      18565  18490  0 15:00 pts/2    00:00:00 grep --color=auto nginx
    
    

    最后启动成功:使用 wget http://127.0.0.1 获取到了html文件

    
    [root@localhost ~]# wget http://127.0.0.1
    --2020-11-12 15:01:39--  http://127.0.0.1/
    正在连接 127.0.0.1:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:612 [text/html]
    正在保存至: “index.html”
    
    100%[================================================================================>] 612         --.-K/s 用时 0s      
    
    2020-11-12 15:01:39 (45.2 MB/s) - 已保存 “index.html” [612/612])
    
    [root@localhost ~]# cat index.html 
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
             35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    
    

    在客户端使用wget方式访问相当于下载了该地址的文件(根据文件内容我们可以判断nginx启动成功),如果我们通过浏览器访问呢,结果是一直转圈圈,这是为什么呢?

    每个计算机都有防火墙firewall来保护我们的计算机不受到外界恶意攻击,当我们在另一台电脑访问该计算机时,需要该计算机开放出对应的端口才能进行访问。否则只能通过本机的客户端访问。

    所以我们需要关闭防火墙,或者开放对应的端口才可以通过浏览器访问另一台电脑的nginx服务。

    防火墙的操作:

    //查看防火墙的状态
    [root@localhost ~]# systemctl status firewalld
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
       Active: active (running) since 四 2020-11-12 10:56:52 CST; 4h 34min ago
         Docs: man:firewalld(1)
     Main PID: 6232 (firewalld)
       CGroup: /system.slice/firewalld.service
               └─6232 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
    
    11月 12 10:56:51 localhost.134 systemd[1]: Starting firewalld - dynamic firewall daemon...
    11月 12 10:56:52 localhost.134 systemd[1]: Started firewalld - dynamic firewall daemon.
    
    //关闭防火墙
    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl status firewalld
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
       Active: inactive (dead) since 四 2020-11-12 15:45:50 CST; 1s ago
         Docs: man:firewalld(1)
      Process: 20962 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
     Main PID: 20962 (code=exited, status=0/SUCCESS)
    
    11月 12 15:45:26 localhost.134 systemd[1]: Starting firewalld - dynamic firewall daemon...
    11月 12 15:45:26 localhost.134 systemd[1]: Started firewalld - dynamic firewall daemon.
    11月 12 15:45:48 localhost.134 systemd[1]: Stopping firewalld - dynamic firewall daemon...
    11月 12 15:45:50 localhost.134 systemd[1]: Stopped firewalld - dynamic firewall daemon.
    
    重启防火墙
    
    [root@localhost ~]# systemctl restart firewalld
    [root@localhost ~]# systemctl status firewalld
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
       Active: active (running) since 四 2020-11-12 15:46:28 CST; 1s ago
         Docs: man:firewalld(1)
     Main PID: 21295 (firewalld)
       CGroup: /system.slice/firewalld.service
               └─21295 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
    
    11月 12 15:46:28 localhost.134 systemd[1]: Starting firewalld - dynamic firewall daemon...
    11月 12 15:46:28 localhost.134 systemd[1]: Started firewalld - dynamic firewall daemon.
    
    
    开放端口:
    firewall-cmd --zone=public --add-port=80/tcp --permanent
     命令含义:
    --zone #作用域
    --add-port=80/tcp  #添加端口,格式为:端口/通讯协议
    --permanent  #永久生效,没有此参数重启后失效
    更新防火墙规则:
    firewall-cmd --reload
    查看80端口
    [root@localhost ~]# firewall-cmd --zone=public --query-port=80/tcp
    yes
    
    查看所有打开的端口: 
    firewall-cmd --zone=public --list-ports
    删除80端口,记得更新防火墙规则
    firewall-cmd --zone=public --remove-port=80/tcp --permanent  
    
    以上当查询到80端口后就可以通过浏览器访问nginx服务啦
    
    查看端口号
    netstat -ntlp   //查看当前所有tcp端口·
    netstat -ntulp |grep 1935   //查看所有1935端口使用情况
    

    更加详细的开放端口操作,借阅:https://blog.csdn.net/s_p_j/article/details/80979450

    netstat方式查看端口情况

    安装netstat
    yum -y install net-tools    (可以生成ifconfig命令,netstat命令)
    netstat -ntlp   //查看当前所有tcp端口
    
    [root@localhost ~]# netstat -ntlp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      18555/nginx: master 
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6724/sshd           
    tcp6       0      0 :::22                   :::*                    LISTEN      6724/sshd
    
    netstat -ntulp |grep 80   //查看所有80端口使用情况
    
    

    losf查看端口使用情况

    安装losf
    [root@localhost ~]# yum install lsof
    
    [root@localhost ~]# lsof -i:80
    COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx   18555  root    6u  IPv4  71770      0t0  TCP *:http (LISTEN)
    nginx   18556 nginx    6u  IPv4  71770      0t0  TCP *:http (LISTEN)
    

    总结:查看端口是否开启和使用情况方式有 losf -i:port, netstat -ntlp |grep 80, firewall-cmd --zone=public --query-port=80/tcp

    查看nginx进程并kill该进程

    [root@localhost ~]# ps -ef | grep nginx
    root      23089      1  0 16:14 ?        00:00:00 nginx: master process nginx
    nginx     23090  23089  0 16:14 ?        00:00:00 nginx: worker process
    root      23099  18369  0 16:14 pts/1    00:00:00 grep --color=auto nginx
    [root@localhost ~]# kill 23089
    [root@localhost ~]# ps -ef | grep nginx
    root      23204  18369  0 16:17 pts/1    00:00:00 grep --color=auto nginx
    
    // 强制杀死进程
    kill -9 进程号
    

    对nginx.conf的一些认识:

    worker_processes 1; #可以指定启动的固定nginx进程数,或使用auto,auto是启动与当前CPU 线程相同的进程数,如CPU是四核八线程的就启动八个进程的Nginx工作进程。

    查看CPU的核心数量:
    [root@localhost ~]# grep process /proc/cpuinfo  | wc -l
    4
    
    Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。
    
    配置Nginx多核CPU,worker_cpu_affinity使用方法和范例
    参考该博客可以查看多核CPU进程配置。
    https://www.cnblogs.com/pangbing/p/6537188.html
    

    nginx配置详细参考:https://www.cnblogs.com/yy-cola/p/10399219.html

  • 相关阅读:
    js:数据结构笔记13--检索算法
    ember.js:使用笔记9 开始单元测试
    js:数据结构笔记12--排序算法(2)
    js:数据结构笔记11--排序算法(1)
    js:数据结构笔记10--图和图算法
    js:数据结构笔记9--二叉树
    js:数据结构笔记8--集合
    js:数据结构笔记7--哈希表
    js:数据结构笔记6--字典
    js:数据结构笔记5--链表
  • 原文地址:https://www.cnblogs.com/justsus/p/13964047.html
Copyright © 2011-2022 走看看