Nginx如何配置虚拟主机?
你或许还需要了解如何在CentOS7上安装LEMP(Linux+Nginx+MySQL+PHP)环境?
适用于CentOS7操作系统,Nginx建立虚拟主机配置多站点的方法:
Nginx配置
建立主机配置文件存放目录
mkdir /etc/nginx/sites-available mkdir /etc/nginx/sites-enabled
修改Nginx配置文件
vi /etc/nginx/nginx.conf
找到这一行
include /etc/nginx/conf.d/*.conf;
在它下面加一行
include /etc/nginx/sites-enabled/*.conf;
保存并退出
8X------------------------------------------------我是分割线--------------------------------
虚拟主机配置
建立子站点目录
mkdir -p /mnt/www/example1.com/public_html/
建立测试文件
vi /mnt/www/example1.com/public_html/index.php
<?php echo "<h1>Welcome to example1.com!</h1>"; ?>
建立站点配置文件
vi /etc/nginx/sites-available/example1.com.conf
OPTION #1: 建立站点配置文件
server { listen 80; root /mnt/www/example1.com/public_html; index index.php index.html index.htm; server_name example1.com www.example1.com; location / { try_files $uri $uri/ /index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /mnt/www/example1.com/public_html; } # pass the PHP scripts to PHP-FPM server listening on 127.0.0.1:9000 location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
OPTION #2: 如果使用的是ProcessWire项目则可以使用以下Rewrite规则:
你可以阅读《 用Nginx fastcgi_cache缓存为你的PHP网站加速 》了解NGINX的缓存配置。
fastcgi_cache_path /mnt/www/towait.com/nginx_cache levels=1:2 keys_zone=towait:100m inactive=30d max_size=10g; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary off; gzip_disable "MSIE [1-6]\."; server { listen 80; # ---------------------------------------------------------------------------------------------- # Site Config # ---------------------------------------------------------------------------------------------- root /mnt/www/towait.com/public_html; index index.php index.html index.htm; server_name www.towait.com towait.com; client_max_body_size 50m; # ----------------------------------------------------------------------------------------------- # Optional: Redirect users to the 'www.' version of the site (uncomment to enable). # For example: http://processwire.com/ would be redirected to http://www.processwire.com/ # ----------------------------------------------------------------------------------------------- if ($host !~* ^www\.) { rewrite ^(.*)$ $scheme://www.$host$1 permanent; } # ----------------------------------------------------------------------------------------------- # Access Restrictions: Protect ProcessWire system files # ----------------------------------------------------------------------------------------------- # Block access to ProcessWire system files location ~ \.(inc|info|module|sh|sql)$ { deny all; } # Block access to any file or directory that begins with a period location ~ /\. { deny all; } # Block access to protected assets directories location ~ ^/(site|site-[^/]+)/assets/(cache|logs|backups|sessions|config|install|tmp)($|/.*$) { deny all; } # Block acceess to the /site/install/ directory location ~ ^/(site|site-[^/]+)/install($|/.*$) { deny all; } # Block dirs in /site/assets/ dirs that start with a hyphen location ~ ^/(site|site-[^/]+)/assets.*/-.+/.* { deny all; } # Block access to /wire/config.php, /site/config.php, /site/config-dev.php, and /wire/index.config.php location ~ ^/(wire|site|site-[^/]+)/(config|index\.config|config-dev)\.php$ { deny all; } # Block access to any PHP-based files in /templates-admin/ location ~ ^/(wire|site|site-[^/]+)/templates-admin($|/|/.*\.(php|html?|tpl|inc))$ { deny all; } # Block access to any PHP or markup files in /site/templates/ location ~ ^/(site|site-[^/]+)/templates($|/|/.*\.(php|html?|tpl|inc))$ { deny all; } # Block access to any PHP files in /site/assets/ location ~ ^/(site|site-[^/]+)/assets($|/|/.*\.php)$ { deny all; } # Block access to any PHP files in core or core module directories location ~ ^/wire/(core|modules)/.*\.(php|inc|tpl|module)$ { deny all; } # Block access to any PHP files in /site/modules/ location ~ ^/(site|site-[^/]+)/modules/.*\.(php|inc|tpl|module)$ { deny all; } # Block access to any software identifying txt files location ~ ^/(COPYRIGHT|INSTALL|README|htaccess)\.(txt|md)$ { deny all; } # Block all http access to the default/uninstalled site-default directory location ~ ^/site-default/ { deny all; } # ----------------------------------------------------------------------------------------------- # If the request is for a static file, then set expires header and disable logging. # Give control to ProcessWire if the requested file or directory is non-existing. # ----------------------------------------------------------------------------------------------- location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires 24h; log_not_found off; access_log off; try_files $uri $uri/ /index.php?it=$uri&$args; } # ----------------------------------------------------------------------------------------------- # This location processes all other requests. If the request is for a file or directory that # physically exists on the server, then load the file. Else give control to ProcessWire. # ----------------------------------------------------------------------------------------------- set $skip_cache 0; # POST requests and urls with a query string should always go to PHP if ($request_method = POST) { set $skip_cache 1; } #if ($query_string != "") { # set $skip_cache 1; #} # Don't cache uris containing the following segments 自行修改此处参数,如后台地址和不需要缓存的目录 if ($request_uri ~* "/backend/|/api/") { set $skip_cache 1; } # Don't use the cache for logged in users or recent commenters if ($http_cookie ~* "wire_challenge") { set $skip_cache 1; } location / { try_files $uri $uri/ /index.php?it=$uri&$args; } # ----------------------------------------------------------------------------------------------- # Pass .php requests to fastcgi socket # ----------------------------------------------------------------------------------------------- location ~ \.php$ { # Check if the requested PHP file actually exists for security try_files $uri =404; # Fix for server variables that behave differently under nginx/php-fpm than typically expected fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # Caching Content fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; fastcgi_cache towait; # Params fastcgi_cache_valid 200 301 302 12h; fastcgi_cache_valid 404 500 502 503 504 0s; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale error timeout invalid_header http_500 http_503 updating; fastcgi_pass_header Set-Cookie; fastcgi_pass_header Cookie; fastcgi_ignore_headers Cache-Control Expires Set-Cookie; add_header X-Cache "$upstream_cache_status - $upstream_response_time"; fastcgi_cache_key "$scheme$request_method$host$request_uri"; } }
建立软连接
ln -s /etc/nginx/sites-available/example1.com.conf /etc/nginx/sites-enabled/example1.com.conf
使用命令 /usr/sbin/nginx -t
测试conf文件是否有误
[root@localhost public_html]# /usr/sbin/nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
这点很重要!很重要!很重要!重要的事情说三遍,如果某个站点配置出错导致Nginx无法启动会使所有站点全部挂掉,到时候你会比我急,所以最好养成这个习惯,修改配置后先 /usr/sbin/nginx -t
一下!
最后重启Nginx
systemctl restart nginx
用你绑定的域名访问页面:
如添加更多站点只需要重复分割线以后的步骤即可