源码安装Nginx

article4周前更新 done
236 0 1

Nginx(“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强。

Nginx可以作为静态页面的Web服务器,同时还支持CGI协议的动态语言,比如Perl、PHP等。但是不支持Java。Java程序只能通过与Tomcat配合完成。

Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

源码安装Nginx

应用场景:

  • http服务器:Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
  • 虚拟主机:可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
  • 反向代理:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理
  • 负载均衡:多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
  • 动静分离:为了加快网站的解析速度,将静态页面和动态页面由不同的服务器来解析,加快解析速度,降低服务器压力。

master发布任务woker进行争抢,一个master和多个woker特点:

  • 可以使用nginx -s reload,利于热部署;
  • 每个woker都是一个单独的进程,不需加锁,其中1个出问题不影响其他
  • woker数量和CPU数量相等可以发挥cpu的最大性能
  • woker connection发送请求一般占用2个连接数(静态访问)或者4个连接数(动态访问)

nginx源码包下载地址:http://nginx.org/download/

部署

安装依赖环境

  • ubuntu版
apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
  • centos版
yum -y install gcc gcc-c++ make libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel

下载源码包

wget https://pan.cddone.com/d/wd/tar/nginx-1.24.0.tar.gz

解压并进入目录

tar -zxf nginx-1.24.0.tar.gz && cd nginx-1.24.0

创建管理用户www

useradd -s /sbin/nologin www

编译(指定用户/开启ssl模块/开启用户认证模块)

./configure --user=www --group=www --with-http_ssl_module --with-http_auth_request_module

安装编译

make && make install

设置命令软连接

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

设置开机自启动

echo nginx >> /etc/rc.d/rc.local

授权开机自启动

chmod +x /etc/rc.d/rc.local 

查看nginx版本

nginx -v

启动服务

nginx

重新加载配置

nginx -s reload

停止服务

nginx -s stop

查看进程

ps -ef | grep nginx

访问测试

https://cddone.cn
源码安装Nginx

主配置文件设置

  • 强制跳转ssl(访问80自动跳转至443)return 301 https://$host$request_uri;

#user  nobody;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;
        return 301 https://$host$request_uri;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            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;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      ssl/cddone.cn.pem;
        ssl_certificate_key  ssl/cddone.cn.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

}

events块

  • use epoll;:指定使用 epoll I/O 模型,epoll 是一种高效的事件驱动机制,用于处理并发连接和网络事件。
  • worker_connections 65535;:指定每个 worker 进程最大并发连接数,可以同时处理的客户端连接数。
  • multi_accept on;:多连接接受机制,当有新的连接到达时 Nginx 将尽可能接受多个连接,而不是一次只接受一个连接。这可以提高连接的接受效率。
  • 这个示例中的配置适用于高并发的场景,通过使用 epoll I/O 模型和较大的并发连接数,可以提高 Nginx 的性能和并发处理能力。然而,具体的配置应该根据服务器的硬件资源、网络负载和实际需求进行调整。在实际生产环境中,可以根据服务器的性能监控和负载测试结果来优化这些参数的值。
events {
  use epoll;
  worker_connections 65535;
  multi_accept on;
}

 

© 版权声明

暂无评论

暂无评论...