Skip to main content
Glama

nginx_setup

Configure Nginx to set up domain, reverse proxy, and SSL certificates for backend applications. Simplify server management with automated setup on the VPS Initialize platform.

Instructions

Configure Nginx with domain, reverse proxy, and SSL

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
domainYesDomain name
portYesBackend port to proxy to
sslNoEnable SSL with Certbot

Implementation Reference

  • Core handler function that implements the nginx_setup tool logic: creates config, tests/reloads nginx, sets up SSL if requested, configures firewall.
    async setupNginx(config: NginxConfig): Promise<NginxResult> { try { logger.info('Setting up Nginx configuration', { domain: config.domain, port: config.port }); // Create Nginx configuration const nginxConfigResult = await this.createNginxConfig(config); if (!nginxConfigResult.success) { return nginxConfigResult; } // Test and reload Nginx const testResult = await this.sshService.executeCommand('nginx -t'); if (!testResult.success) { return { success: false, message: `Nginx configuration test failed: ${testResult.stderr}`, }; } const reloadResult = await this.sshService.executeCommand('systemctl reload nginx'); if (!reloadResult.success) { return { success: false, message: `Failed to reload Nginx: ${reloadResult.stderr}`, }; } // Setup SSL if requested if (config.ssl) { const sslResult = await this.setupSSL(config.domain); if (!sslResult.success) { return sslResult; } } // Configure firewall await this.configureFirewall(); return { success: true, message: `Nginx configured successfully for ${config.domain}${config.ssl ? ' with SSL' : ''}`, }; } catch (error) { logger.error('Nginx setup failed', { error, config }); return { success: false, message: `Nginx setup failed: ${error instanceof Error ? error.message : 'Unknown error'}`, }; } }
  • Helper function that generates the complete Nginx server block configuration as a template string.
    private generateNginxConfig(config: NginxConfig): string { return `server { listen 80; server_name ${config.domain} www.${config.domain}; # Security headers add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; # Gzip compression gzip on; gzip_vary on; gzip_min_length 1024; gzip_proxied expired no-cache no-store private must-revalidate auth; gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json; location / { proxy_pass http://127.0.0.1:${config.port}; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; 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_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; proxy_read_timeout 86400; } # Deny access to hidden files location ~ /\\. { deny all; } # Optimize static file serving location ~* \\.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; try_files $uri @proxy; } location @proxy { proxy_pass http://127.0.0.1:${config.port}; 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_set_header X-Forwarded-Proto $scheme; } }`;
  • MCP server handler that validates input using Zod schema and delegates to NginxManager.setupNginx.
    private async handleNginxSetup( args: unknown ): Promise<{ content: Array<{ type: 'text'; text: string }> }> { if (!this.nginxManager) { throw new Error('SSH connection not established. Please connect first.'); } const config = NginxConfigSchema.parse(args); const result = await this.nginxManager.setupNginx(config); return { content: [ { type: 'text', text: result.success ? `Nginx configured successfully for ${config.domain}` : `Nginx setup failed: ${result.message}`, }, ], }; }
  • Tool registration in the MCP server's listTools handler, defining name, description, and input schema.
    { name: 'nginx_setup', description: 'Configure Nginx with domain, reverse proxy, and SSL', inputSchema: { type: 'object', properties: { domain: { type: 'string', description: 'Domain name' }, port: { type: 'number', description: 'Backend port to proxy to' }, ssl: { type: 'boolean', description: 'Enable SSL with Certbot' }, }, required: ['domain', 'port'], }, },
  • Zod schema used for input validation in the nginx_setup handler.
    const NginxConfigSchema = z.object({ domain: z.string().describe('Domain name for Nginx configuration'), port: z.number().describe('Backend port to proxy to'), ssl: z.boolean().optional().default(true).describe('Enable SSL with Certbot'), });

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/oxy-Op/DevPilot'

If you have feedback or need assistance with the MCP directory API, please join our Discord server