安装Nginx之前,必须解决依赖的问题,所以要首先安装上:pcre-x.x.x.tar.gz 和pcre-devel-x.x.x.rpm这两个包。
1.安装pcre-x.x.x.tar
tar zxvf pcre-x.x.x.tar.gz
cd pcre-x.x.x
./configure
make && make install
2.安装pcre-devel-x.x.x.rpm
rpm -ivh pcre-devel-x.x.x.rpm
3.安装好依赖之后就安装nginx-x.x.x.tar.gz
tar zxvf nginx-x.x.x.tar.gz
cd nginx-x.x.x
./configure --with-http_stub_status_module --prefix=/usr/local/nginx --with-debug --with-http_sub_module
make && make install
这里要注意的是:编译的时候,nginx有很多模块可以编译的,但是对于一个用来进行转发的负载均衡nginx来说,以上两个足够了。
安装好之后,nginx的默认安装路径是:/usr/local/nginx/
4.修改配置文件
vim /usr/local/nginx/conf/nginx.conf
要进行转发,就要把转发的服务器列表列出来;如下:
http{
.
.
.
upstream Servers {
server ip地址:端口 weight=10;(权值,表明转发的优先权,相等的时候就是均衡转发)
server ip地址:端口 weight=10;
}
server{
.
.
location / {
proxy_pass http://Servers;
root html;
index index.html index.htm;
}
}}
最后做点小小的优化;
a。查看一下服务器的cpu核心数
cat /proc/cpuinfo
然后再nginx的配置文件里面的开头处,加上:
worker_processes 4;(这里取值可以是跟核心数一样,也可以是核心数的2倍,看需要)
b。接着在下面加上工作的连接数配置
events {
worker_connections 102400;(这里也是看情况修改)
}
下面是完整的修改后的配置文件:
#user nobody;
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 102400;
}
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;
#设定负载均衡列表
upstream Servers {
server ip地址:端口 weight=10;
server ip地址:端口 weight=10;
}
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://Servers;
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;
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://Servers;
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;
#}
}
配置文件弄好之后,可以先测试一下是否配置正确:
/usr/local/nginx/sbin/nginx -t
如果有错,会告诉你哪句有错的,很人性化。
接着是启动:
/usr/local/nginx/sbin/nginx
如果遇到需要切换转发服务器的时候,可以用重新加载命令进行无缝切换:
先修改好配置文件,然后执行以下命令,就完成了切换。出问题的服务器可以抽出来修理了,弄好了还可以这样放回去。
/usr/local/nginx/sbin/nginx -s reload
最后附上nginx的编译参数表:
--prefix=<path> - Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。
--sbin-path=<path> - Nginx可执行文件安装路径。只能安装时指定,如果没有指定,默认为<prefix>/sbin/nginx。
--conf-path=<path> - 在没有给定-c选项下默认的nginx.conf的路径。如果没有指定,默认为<prefix>/conf/nginx.conf。
--pid-path=<path> - 在nginx.conf中没有指定pid指令的情况下,默认的nginx.pid的路径。如果没有指定,默认为 <prefix>/logs/nginx.pid。
--lock-path=<path> - nginx.lock文件的路径。
--error-log-path=<path> - 在nginx.conf中没有指定error_log指令的情况下,默认的错误日志的路径。如果没有指定,默认为 <prefix>/logs/error.log。
--http-log-path=<path> - 在nginx.conf中没有指定access_log指令的情况下,默认的访问日志的路径。如果没有指定,默认为 <prefix>/logs/access.log。
--user=<user> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的用户。如果没有指定,默认为 nobody。
--group=<group> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的组。如果没有指定,默认为 nobody。
--builddir=DIR - 指定编译的目录
--with-rtsig_module - 启用 rtsig 模块
--with-select_module --without-select_module - 允许或不允许开启SELECT模式,如果 configure 没有找到更合适的模式,比如:kqueue(sun os),epoll (linux kenel 2.6+), rtsig(实时信号)或者/dev/poll(一种类似select的模式,底层实现与SELECT基本相 同,都是采用轮训方法) SELECT模式将是默认安装模式
--with-poll_module --without-poll_module - 允许或不允许开启POLL模式,如果没有更合适的模式,则可以开启。
--with-http_ssl_module - 开启HTTP SSL 模块,使Nginx可以支持HTTPS请求,这个模块需要已经安装OPENSSL,在Debian系统上是libssl
--with-http_realip_module - 启用 ngx_http_realip_module
--with-http_addition_module - 启用 ngx_http_addition_module
--with-http_sub_module - 启用 ngx_http_sub_module
--with-http_dav_module - 启用 ngx_http_dav_module
--with-http_flv_module - 启用 ngx_http_flv_module
--with-http_stub_status_module - 启用 "server status" 页
--without-http_charset_module - 禁用 ngx_http_charset_module
--without-http_gzip_module - 禁用 ngx_http_gzip_module. 如果启用,需要 zlib 。
--without-http_ssi_module - 禁用 ngx_http_ssi_module
--without-http_userid_module - 禁用 ngx_http_userid_module
--without-http_access_module - 禁用 ngx_http_access_module
--without-http_auth_basic_module - 禁用 ngx_http_auth_basic_module
--without-http_autoindex_module - 禁用 ngx_http_autoindex_module
--without-http_geo_module - 禁用 ngx_http_geo_module
--without-http_map_module - 禁用 ngx_http_map_module
--without-http_referer_module - 禁用 ngx_http_referer_module
--without-http_rewrite_module - 禁用 ngx_http_rewrite_module. 如果启用需要 PCRE 。
--without-http_proxy_module - 禁用 ngx_http_proxy_module
--without-http_fastcgi_module - 禁用 ngx_http_fastcgi_module
--without-http_memcached_module - 禁用 ngx_http_memcached_module
--without-http_limit_zone_module - 禁用 ngx_http_limit_zone_module
--without-http_empty_gif_module - 禁用 ngx_http_empty_gif_module
--without-http_browser_module - 禁用 ngx_http_browser_module
--without-http_upstream_ip_hash_module - 禁用 ngx_http_upstream_ip_hash_module
--with-http_perl_module - 启用 ngx_http_perl_module
--with-perl_modules_path=PATH - 指定 perl 模块的路径
--with-perl=PATH - 指定 perl 执行文件的路径
--http-log-path=PATH - 指定http默认访问日志的路径
--http-client-body-temp-path=PATH - 指定http客户端请求缓存文件存放目录的路径
--http-proxy-temp-path=PATH - 指定http反向代理缓存文件存放目录的路径
--http-fastcgi-temp-path=PATH - 指定http fastcgi缓存文件存放目录的路径
--without-http - 禁用 HTTP server
--with-mail - 启用 IMAP4/POP3/SMTP 代理模块
--with-mail_ssl_module - 启用 ngx_mail_ssl_module
--with-cc=PATH - 指定 C 编译器的路径
--with-cpp=PATH - 指定 C 预处理器的路径
--with-cc-opt=OPTIONS - Additional parameters which will be added to the variable CFLAGS. With the use of the system library PCRE in FreeBSD, it is necessary to indicate --with-cc-opt="-I /usr/local/include". If we are using select() and it is necessary to increase the number of file descriptors, then this also can be assigned here: --with-cc-opt="-D FD_SETSIZE=2048".
--with-ld-opt=OPTIONS - Additional parameters passed to the linker. With the use of the system library PCRE in FreeBSD, it is necessary to indicate --with-ld-opt="-L /usr/local/lib".
--with-cpu-opt=CPU - 为特定的 CPU 编译,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
--without-pcre - 禁止 PCRE 库的使用。同时也会禁止 HTTP rewrite 模块。在 "location" 配置指令中的正则表达式也需要 PCRE 。
--with-pcre=DIR - 指定 PCRE 库的源代码的路径。
--with-pcre-opt=OPTIONS - 设置PCRE的额外编译选项
--with-md5=DIR - 设置MD5库的源代码路径
--with-md5-opt=OPTIONS - 设置MD5库的额外编译选项
--with-md5-asm - 使用MD5汇编源码
--with-sha1=DIR - 设置sha1库的源代码路径
--with-sha1-opt=OPTIONS - 设置sha1库的额外编译选项
--with-sha1-asm - 使用sha1汇编源码
--with-zlib=DIR - 设置zlib库的源代码路径
--with-zlib-opt=OPTIONS - 设置zlib库的额外编译选项
--with-zlib-asm=CPU - zlib针对特定CPU的优化,合法的值为: pentium, pentiumpro
--with-openssl=DIR - 设置OpenSSL库的源代码路径
--with-openssl-opt=OPTIONS - 设置OpenSSL库的额外编译选项
--with-debug - 启用调试日志
--add-module=PATH - 添加一个在指定路径中能够找到的第三方模块