Linux中Nginx安装与配置详解及常见问题

3 Nginx安装
3.1 安装前的准备
    1)准备 pcre-8.12.tar.gz。该文件为正则表达式库。让nginx支持rewrite需要安装这个库。
    2) 准备 nginx-1.5.0.tar.gz。该文件为nginx的linux版本安装文件。
    3)确保进行了安装了linux常用必备支持库。

Linux中必备常用支持库的安装(CentOS-6.5)

在CentOS安装软件的时候,可能缺少一部分支持库,而报错。这里首先安装系统常用的支持库。那么在安装的时候就会减少很多的错误的出现。

# yum install -y gcc gdb strace gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs patch e2fsprogs-devel krb5-devel libidn libidn-devel openldap-devel nss_ldap openldap-clients openldap-servers libevent-devel libevent uuid-devel uuid mysql-devel

3.2 正则表达式库安装
    1)确保进行了安装了linux常用必备支持库。检查是否安装了g++、gcc。rpm -qa | grep gcc 之后需要出现3个包如下图所示。如果没有出现。需要安装g++、gcc。

    # yum install gcc-c++

Linux中Nginx安装与配置详解及常见问题_第1张图片

     2) 上传pcre-8.12.tar.gz, nginx-1.5.0.tar.gz 到 /usr/local/src/nginx目录下。
    
    3)解压pcre-8.12.tar.gz
    # cd /usr/local/src/nginx
    # tar zxvf pcre-8.12.tar.gz
    
    4)进入解压后的目录
    # cd pcre-8.12 
    
    5)配置
    #  ./configure
    6) 编译
    #  make
    7) 安装
    #  make install
   

3.3 Nginx安装
    0) 创建用户nginx使用的www用户。
    # groupadd  www  #添加www组    
    # useradd -g  www www -s /bin/false  #创建nginx运行账户www并加入到www组,不允许www用户直接登录系统
    
    创建安装目录与日志目录
    a) 安装目录
    # mkdir /usr/local/nginx
    b) 日志目录
    # mkdir /data0/logs/nginx
    # chown www:www /data0/logs/nginx -R
    
    1) 判断系统是否安装了zlib-devel。如果没有安装。使用
    # yum install -y zlib-devel

Linux中Nginx安装与配置详解
    
    2) 解压
    # cd /usr/local/src/nginx
    # tar zxvf nginx-1.5.0.tar.gz
    
    3) 进入目录
    # cd nginx-1.5.0
    
    4) 配置。通常将软件安装在/usr/local/目录下。
    # ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
    5)编译
    # make
    
    6)  安装
    #  make install
    
    7)  检查是否安装成功
    # cd  /usr/local/nginx/sbin
    # ./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

3.4 配置防火墙80端口
    #修改防火墙配置: 
    # vi + /etc/sysconfig/iptables
    #添加配置项 
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    #重启防火墙 
    # service iptables restart

 

3.5 上传配置文件
    1)上传nginx.conf (文件下载地址见上面的Linux公社资源站)
    # cd /usr/local/nginx/conf
    # rz nginx.conf
    2) 上传fastcgi_params.phis
    # rz fastcgi_params.phis

3.6 启动停止重启与测试
    1)启动
        #方法1
        # /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
        #方法2
        # cd /usr/local/nginx/sbin
        # ./nginx


    2) 停止
        #查询nginx主进程号 
        ps -ef | grep nginx
        #停止进程 
        kill -QUIT 主进程号 
        #快速停止 
        kill -TERM 主进程号 
        #强制停止 
        pkill -9 nginx
    
    3) 重启(首次启动需:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf)
        /usr/local/nginx/sbin/nginx -s reload
    
    4)测试
        #测试端口 
        netstat -na | grep 80
        #浏览器中测试 
        http://ip:80
   

3.7 配置Nginx支持php
    1)方式一:手动修改
    vi /usr/local/nginx/conf/nginx.conf      #编辑配置文件    
    user  www  www;          #首行user去掉注释,修改Nginx运行组为www www;必须与/usr/local/php5/etc/php-fpm.conf中的user,group配置相同,否则php运行出错    
    index  index.php  index.html index.htm;    #添加index.php    
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000    
    #    
    location ~ \.php$ {    
      #root          html;#此处和server下面root保持一致,默认为html    
      fastcgi_pass  127.0.0.1:9000;    
      fastcgi_index  index.php;    
      #fastcgi_param SCRIPT_FILENAME  /usr/local/nginx/html/$fastcgi_script_name; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
      include        fastcgi_params; 
    }
        
    注意:取消FastCGI server部分location的注释,并要注意fastcgi_param行的参数,改为/data/webroot/(此为网站根目录绝对路径)$fastcgi_script_name
    
    /etc/init.d/nginx restart  #重启nginx
    2)方式二:上传配置文件

    如3.5节操作方式,或手动填写配置文件

  # vi  /usr/local/php5/sbin/php-fpm



 All relative paths in this config are relative to php's install prefix

 

  Pid file
  /usr/local/php5/logs/php-fpm.pid

  Error log file
  /data0/logs/php/php-fpm.log

  Log level notice alert, error, warn, notice, debug
  warn

  When this amount of php processes exited with SIGSEGV or SIGBUS ...
  10

  ... in a less than this interval of time, a graceful restart will be initiated.
  Useful to work around accidental curruptions in accelerator's shared memory.
  1m

  Time limit on waiting child's reaction on signals from master
  5s

  Set to 'no' to debug fpm
  yes

 

 

 

   Name of pool. Used in logs and stats.
   default

   Address to accept fastcgi requests on.
   Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'
   127.0.0.1:9000

   

    Set listen(2) backlog
    1024

    Set permissions for unix socket, if one used.
    In Linux read/write permissions must be set in order to allow connections from web server.
    Many BSD-derrived systems allow connections regardless of permissions.
   
   
    0666
   

   Additional php.ini defines, specific to this pool of workers.
   
 
    1       
   

   Unix user of processes
   www   

   Unix group of processes
   www 

   Process manager settings
   

    Sets style of controling worker process count.
    Valid values are 'static' and 'apache-like'
    static

    Sets the limit on the number of simultaneous requests that will be served.
    Equivalent to Apache MaxClients directive.
    Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi
    Used with any pm_style.
    384

    Settings group for 'apache-like' pm style
   

     Sets the number of server processes created on startup.
     Used only when 'apache-like' pm_style is selected
     20

     Sets the desired minimum number of idle server processes.
     Used only when 'apache-like' pm_style is selected
     5

     Sets the desired maximum number of idle server processes.
     Used only when 'apache-like' pm_style is selected
     35

   

   

   The timeout (in seconds) for serving a single request after which the worker process will be terminated
   Should be used when 'max_execution_time' ini option does not stop script execution for some reason
   '0s' means 'off'
   30s

   The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
   '0s' means 'off'
                        0s

   The log file for slow requests
   /data0/logs/php/slow.log

   Set open file desc rlimit
   51200

   Set max core size rlimit
   0

   Chroot to this directory at the start, absolute path
   

   Chdir to this directory at the start, absolute path
   

   Redirect workers' stdout and stderr into main error log.
   If not set, they will be redirected to /dev/null, according to FastCGI specs
   yes

   How much requests each process should execute before respawn.
   Useful to work around memory leaks in 3rd party libraries.
   For endless request processing please specify 0
   Equivalent to PHP_FCGI_MAX_REQUESTS
   1024

   Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.
   Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)
   Makes sense only with AF_INET listening socket.
   127.0.0.1

   Pass environment variables like LD_LIBRARY_PATH
   All $VARIABLEs are taken from current environment
   
    $HOSTNAME
    /usr/local/bin:/usr/bin:/bin
    /tmp
    /tmp
    /tmp
    $OSTYPE
    $MACHTYPE
    2
   

 

 

 


    2) 重启php-fpm与nginx
    # cd /usr/local/php5/sbin
    # ./php-fpm restart
    # cd /usr/local/nginx/sbin
    # ./nginx -s reload

 

4 Nginx配置详解
配置详细说明
#定义Nginx运行的用户和用户组
user www;
 
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes 8;
 
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log ar/loginx/error.log info;
 
#进程文件
pid ar/runinx.pid;
 
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
 
#工作模式与连接数上限
events
{
    #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    use epoll;
    #单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections 65535;
}
 
#设定http服务器
http
{
    include mime.types; #文件扩展名与文件类型映射表
    default_type application/octet-stream; #默认文件类型
    #charset utf-8; #默认编码
    server_names_hash_bucket_size 128; #服务器名字的hash表大小
    client_header_buffer_size 32k; #上传文件大小限制
    large_client_header_buffers 4 64k; #设定请求缓
    client_max_body_size 8m; #设定请求缓
    sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
    tcp_nopush on; #防止网络阻塞
    tcp_nodelay on; #防止网络阻塞
    keepalive_timeout 120; #长连接超时时间,单位是秒
    
    #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    
    #gzip模块设置
    gzip on; #开启gzip压缩输出
    gzip_min_length 1k; #最小压缩文件大小
    gzip_buffers 4 16k; #压缩缓冲区
    gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    gzip_comp_level 2; #压缩等级
    gzip_types text/plain application/x-javascript text/css application/xml;
    #压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
    gzip_vary on;
    #limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
    
    upstream blog.linuxidc.com {
        #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
        server 192.168.80.121:80 weight=3;
        server 192.168.80.122:80 weight=2;
        server 192.168.80.123:80 weight=3;
    }
    
    #虚拟主机的配置(一)
    server
    {
        #监听端口
        listen 80;
        #域名可以有多个,用空格隔开
        server_name www.linuxidc.com ha97.com;
        index index.html index.htm index.php;
        root /data/www/linuxidc;
        location ~ .*.(php|php5)?$
        {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
        }
        #图片缓存时间设置
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires 10d;
        }
        #JS和CSS缓存时间设置
        location ~ .*.(js|css)?$
        {
            expires 1h;
        }
        #日志格式设定
        log_format access '$remote_addr - $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" $http_x_forwarded_for';
        #定义本虚拟主机的访问日志
        access_log ar/loginx/linuxidcaccess.log access;
    
        #对 "/" 启用反向代理
        location / {
            proxy_pass http://127.0.0.1:88;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #以下是一些反向代理的配置,可选。
            proxy_set_header Host $host;
            client_max_body_size 10m; #允许客户端请求的最大单文件字节数
            client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
            proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
            proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k;
            #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        }
    
        #设定查看Nginx状态的地址
        location /NginxStatus {
            stub_status on;
            access_log on;
            auth_basic "NginxStatus";
            auth_basic_user_file confpasswd;
            #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
        }
        
        #本地动静分离反向代理配置
        #所有jsp的页面均交由tomcat或resin处理
        location ~ .(jsp|jspx|do)?$ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080;
        }
        #所有静态文件由nginx直接读取不经过tomcat或resin
        location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        { 
            expires 15d; 
        }
        
        location ~ .*.(js|css)?$
        { 
            expires 1h; 
        }
    }
    
    #虚拟主机的配置(二)
    server {
        listen 8080 ;
        server_name 127.0.0.1 172.1218.80;
        allow 127.0.0.1;
        allow 172.1218.0/24;
        deny all;
        location /server_status {
            stub_status on;
            access_log  off;
        }
    }
        

}


nginx: [emerg] getpwnam(“www”) failed 错误处理方法


在配置nginx 时提示如下错误时:
nginx: [emerg] getpwnam(“www”) failed

解决方案一

在nginx.conf中 把user nobody的注释去掉既可

解决方案二

错误的原因是没有创建www这个用户,应该在服务器系统中添加www用户组和用户www,如下命令:

1
2
/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www

以上方法测试通过,启动后,在浏览器里输入IP,即可查看到:
Welcome to nginx!的欢迎界面

解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid

重新启动服务器,访问web服务发现无法浏览啦!登陆服务器之后进到nginx使用./nginx -s reload重新读取配置文件,发现报nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)错误,进到logs文件发现的确没有nginx.pid文件

  [root@localhost sbin]# ./nginx -s reload

  nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

  解决方法:

  [root@localhost nginx]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

  使用nginx -c的参数指定nginx.conf文件的位置

  [root@localhost nginx]# cd logs/

  [root@localhost logs]# ll

  总用量 12

  -rw-r--r-- 1 root root 1246 12月 9 18:10 access.log

  -rw-r--r-- 1 root root 516 12月 10 15:39 error.log

  -rw-r--r-- 1 root root 5 12月 10 15:38 nginx.pid

  看nginx.pid文件已经有了。


你可能感兴趣的:(nginx)